나는 안드로이드 코드를 수정했지만 이전 버전에 틀린 것을 알고 싶습니다.
-
20-12-2019 - |
문제
CheckBox 및 TextView가 포함 된 ListView 와이 어댑터에 뷰 바인더를 추가 했으며이 뷰 바인더에서는 내 확인란과 OnChecked State Listener에서 onChecked State Listener를 추가했습니다.이 코드를 썼습니다. 그러나이 코드가있는 경우 내 확인란이 점검되었을 때 데이터베이스에 저장되었을 때 목록보기를 스크롤 할 때 모두 선택 취소되지 않으면 체크되지 않은 코드에 액세스하고 데이터베이스에 저장을 선택 취소하고 저장하십시오.
onchange state listener 대신 onclick 리스너를 확인란에 추가하여 수정했습니다.
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
ListView는 동일한 동일한 확인란의 뷰에 대한 뷰를 재사용합니다. 여러 ListView 항목에 대한 객체가 여러 ListView 항목에 제공 될 수 있으며 동일한 확인란이 다른 경우가 선택되지 않았습니다.
다른 팁
이 변경 상태 리스너는 GetView가 검사 된 체크 박스 상태를 변경하는 GetView를 다시 한 번 다시 실행하면 데이터베이스에서 값을 변경하는 CheckChangeDlistner 호출이므로 ListView를 스크롤 할 때만 작동 시켰습니다.그리고 onClick을 사용하면 문제가 해결되었을 때 ListView View OnClick 이벤트가 데이터베이스 값을 변경하지 않는 불이행이 아닌 이벤트를 변경하십시오.
ListView의 ViewHorder를 사용 하여이 문제를 해결할 수 있습니다.