2011-12-18 3 views
2

私はCal Poly lab3(http://sites.google.com/site/androidappcourse/labs/lab-3)で作業していました。私がアイテムを展開したり折りたたんだりする際にチェック可能なインターフェースを実装するまでは、そうしなければなりません。それから、私のロジックは正しかったと思っています(拡張ボタンのテキストはまだ変わっているので) - レイアウトは正しく再描画されませんでした。チェック可能なビューのsetChecked()メソッドは、レイアウトを乱すたびに2回発生します。

ログを少し再生した後、私はアイテムをクリックするたびに、非常に短い時間間隔で各アイテムに2回呼び出されることを発見しました。これは図面を混乱させます。古い選択データで初めて - そして新しいもので。

私は一種のsetCheckedは()のみ、他のすべての時間を発動することを設定することで、問題を解決するために管理していること、さらに好奇心です:

public void setChecked(boolean checked) 
{ 
    counter++; 
    if (counter%2==0) 
    { 
     if(checked) expandJokeView(); 
     else collapseJokeView(); 
    } 
    Log.d("SimpleJokeListLog", "SetChecked"+" "+checked+" "+counter+" "+m_joke.toString()); 

} 

をそしてここで、それはcatlogでどのように見えるかです: は私が開始私のカスタムJokeView内の項目がチェック可能

12-18 02:58:16.598: D/SimpleJokeListLog(742): SetChecked false 1 A small 
12-18 02:58:16.628: D/SimpleJokeListLog(742): SetChecked false 1 Cartoonist 
12-18 02:58:16.648: D/SimpleJokeListLog(742): SetChecked false 1 I wonde 
12-18 02:58:16.728: D/SimpleJokeListLog(742): SetChecked false 2 A small 
12-18 02:58:16.748: D/SimpleJokeListLog(742): SetChecked false 2 Cartoonist 
12-18 02:58:16.748: D/SimpleJokeListLog(742): SetChecked false 2 I wondere 

私が選択する最初の項目を実装すると一覧が表示され活動(小...)

12-18 02:59:17.628: D/SimpleJokeListLog(742): SetChecked false 3 A small 
12-18 02:59:17.628: D/SimpleJokeListLog(742): SetChecked false 3 Cartoonis 
12-18 02:59:17.628: D/SimpleJokeListLog(742): SetChecked false 3 I wondere 
12-18 02:59:17.838: D/SimpleJokeListLog(742): SetChecked true 4 A small boy 
12-18 02:59:17.847: D/SimpleJokeListLog(742): SetChecked false 4 Cartoonist 
12-18 02:59:17.858: D/SimpleJokeListLog(742): SetChecked false 4 I wondered 

私は再び秒1

12-18 02:59:24.768: D/SimpleJokeListLog(742): SetChecked true 5 A small boy 
12-18 02:59:24.768: D/SimpleJokeListLog(742): SetChecked false 5 Cartoonist 
12-18 02:59:24.768: D/SimpleJokeListLog(742): SetChecked false 5 I wondered w 
12-18 02:59:24.968: D/SimpleJokeListLog(742): SetChecked false 6 A small 
12-18 02:59:24.968: D/SimpleJokeListLog(742): SetChecked true 6 Cartooni 
12-18 02:59:24.978: D/SimpleJokeListLog(742): SetChecked false 6 I wonde 

第1

12-18 02:59:27.828: D/SimpleJokeListLog(742): SetChecked false 7 A small 
12-18 02:59:27.838: D/SimpleJokeListLog(742): SetChecked true 7 Cartoonis 
12-18 02:59:27.838: D/SimpleJokeListLog(742): SetChecked false 7 I wonder 
12-18 02:59:28.048: D/SimpleJokeListLog(742): SetChecked false 8 A small 
12-18 02:59:28.058: D/SimpleJokeListLog(742): SetChecked false 8 Cartooni 
12-18 02:59:28.068: D/SimpleJokeListLog(742): SetChecked true 8 I wondered 

三番目(このカウンタがなくても、この時間は、それが正しく描画されないのブツ)を選択:

12-18 02:59:31.197: D/SimpleJokeListLog(742): SetChecked false 9 A small b 
12-18 02:59:31.197: D/SimpleJokeListLog(742): SetChecked false 9 Cartoonist 
12-18 02:59:31.197: D/SimpleJokeListLog(742): SetChecked true 9 I wondered 
12-18 02:59:31.417: D/SimpleJokeListLog(742): SetChecked false 10 A small bo 
12-18 02:59:31.417: D/SimpleJokeListLog(742): SetChecked false 10 Cartoonist f 
12-18 02:59:31.427: D/SimpleJokeListLog(742): SetChecked true 10 I wondered why 

答えて

3

を私は最後の3または4時間、このpromelmに固執しています。最後に、拡張と折りたたみのメソッドからsetChecked()コールを削除しようとしました。なぜ私はそれらをそこに置いた...)。多分それはここに、あなたを助け、私のスニペットコードです:

private void collapseRow() { 
    mText.setMaxLines(2); 
    mText.setEllipsize(TruncateAt.MARQUEE); 
    mExpand.setText(COllAPS); 
    mWiki.setVisibility(GONE); 
    requestLayout(); 
    state = COLLAPSED; 


} 
private void expandRow() { 
    mText.setMaxLines(Integer.MAX_VALUE); 
    mText.setEllipsize(null); 
    mExpand.setText(EXPAND); 
    mWiki.setVisibility(VISIBLE); 
    requestLayout(); 
    state = EXPANDED; 

} 
private void setData() { 
    mText.setText(mItem.getDate()); 
} 

@Override 
public boolean isChecked() { 
     Log.d("isChecked", "!!!!!!!"); 
     return mChecked; 

} 

@Override 
public void setChecked(boolean state) { 
    count++; 

    if (state) 
     expandRow(); 
    else 
     collapseRow(); 

    Log.d("setChecked", ""+ state + "" + count); 
} 

@Override 
public void toggle() { 
    Log.d("toggle", "!!!!!!!"); 
    setChecked(!mChecked); 

} 

今、完全にすべての作業:setCheckedの無い複数の呼び出し、およびリストアイテム開閉彼らが必要のように。

関連する問題