私は私のAndroidコードを修正しましたが、私は古いバージョンの何が間違っていたのか知りたいです
-
20-12-2019 - |
質問
チェックボックスとTextViewを含むListViewを持っていて、私は私のアダプターにViewBinderを追加し、このビューバインダーに追加されました。>
OnCheckedChangeListener myCheckChangList = new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
String id=buttonView.getTag()+"";
int buttonid=Integer.valueOf(id);
if(buttonView.isChecked()==true){
Log.d("checked","checked");
myDbHelper.MarkAsFavorite(buttonid);
}
else if(buttonView.isChecked()==false){
Log.d("unchecked","unchecked");
myDbHelper.UnMarkAsFavorite(buttonid);
}
cu=myDbHelper.GetCursor();
adapter.swapCursor(cu);
}
};
.
しかし、私のチェックボックスがチェックされていたときにこのコードがチェックされていたときにデータベースに保存されました。
だから私はonchange状態リスナーの代わりにチェックボックスにオンクリックリスナーを追加して修正しました:
public void onclick(View view) {
String id=view.getTag()+"";
int buttonid=Integer.valueOf(id);
if(((CompoundButton) view).isChecked()==true){
Log.d("checked","checked");
myDbHelper.MarkAsFavorite(buttonid);
}
else if(((CompoundButton) view).isChecked()==false){
Log.d("unchecked","unchecked");
myDbHelper.UnMarkAsFavorite(buttonid);
}
cu=myDbHelper.GetCursor();
adapter.swapCursor(cu);
}
.
そして私はそれ以上問題はありません。しかし、私はこの変更州のリスナーがそのように行動した理由を知りたかったですか?
解決
このcheckbox
をListViewの再ユーザーに再利用します。
他のヒント
この変更状態リスナーは、チェックビューを再度スクロールする場合にのみ、チェックされたチェックボックスの状態が変更されたため、データベース内の値を変更するCheckChangeDlistner呼び出しをチェックします。そして、あなたがあなたの問題を解決したときにあなたの問題を解決したとき、あなたがあなたのデータベース値を変更していないイベントは起動されません。
ListViewのViewHolderを使用してこの問題を解決できます。
所属していません StackOverflow