문제

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를 사용 하여이 문제를 해결할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top