2011-12-14 7 views
7

TextViewと共に各行にチェックボックスを含むリストビューを設定しました。何らかの理由で、ボックスの1つを「チェック」すると、ListViewの反対側のボックスをチェックしているように見えます(つまり、トップボックスを選択すると、チェックボックスがオンのまま下部のチェックボックスが選択されます)。ListViewのチェックボックス - 最初のチェックボックスを選択すると最後のチェックボックスがチェックされます。

ありがとう!

+0

ポストListViewコントロールアダプタやリソースXML – Spidy

+1

あなたは、おそらくいくつかのコードを投稿する必要がありますが、共通する一般的な問題(ではないが、確かにそこにあるためにあなたのコードバグですが、Androidに新しいことがたくさんある人が気づいていないデザインのこと)、Android ListViewの再利用の仕方に関係している可能性があります。 – kabuko

+0

私の目標は、ユーザーが1つまたは複数のチェックボックスを選択したときに表示される(gmailのような)メニューを作成することです。私はコードのどの部分を投稿するかを決める方法は本当に分かりませんが、私の「メニュー」を底に持っていくメソッドを取り除くと、問題はなくなります。どのようにガベージコレクションを実装する上の任意のアイデア? – jonstaff

答えて

4

ViewsはListViewでリサイクルされています。

このチェックボックスは、というアイデアがありません。あなたのアダプタ内の項目は、それが表す行のチェックボックスにすぎません。 リストビュー。現在表示しているデータセットのどの項目を「教える」ために何かをする必要があります。そのため、アダプタのデータとしてString配列のような単純なものを使用する代わりに、チェックボックスの状態を格納する新しいモデルオブジェクトを作成します。あなたはgetView()内の行を返す前に、次に、あなたのような何かを行うことができます:

//somewhere in your class 
private RowData getData(int position) { 
return(((MyAdapter)getListAdapter()).getItem(position)); 
} 



//..then in your adapter in getView() 

    RowData object = getModel(position); 

    if(object.isChecked()) { 
     myCheckbox.setChecked(true); 
    } else { 
     myCheckbox.setChecked(false); 
     } 

    //then retun your view. 
+0

ご回答いただきありがとうございます。私のListAdapterは完全に異なるクラスのfillData()メソッドにあります。それは間違っていますか? – jonstaff

+0

@ jstaff107、いいえ、どこでもあなたのアダプターを持つことができます。 – LuxuryMode

+0

クラス "RowData"はどこから来ているのですか? – jonstaff