Я исправил свой код Android, но я хочу знать, что было не так с старой версией

StackOverflow https://stackoverflow.com//questions/21005728

Вопрос

У меня есть список, содержащий флажок и TextView, и я добавил видомобен на мой адаптер, и в этом Viewbinder я добавил прослушивание состояния в моих флажках, а в The OnChecked State Switcher I написал этот код:

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);

            }
        }; 
.

Но с этим кодом, когда мой флажок был проверен, он был сохранен в базе данных, то когда я прокручиваю список ListView, он не проверяет все BYITLEFELE, доступа к коду не проверяет и снижает флажок, и сохраняет его в базе данных.

Поэтому я исправил его с добавлением слушателя OnClick в флажок вместо прослушивателя состояния 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, повторно использует представления для эффективности того же объекта Checkbox, может быть предоставлен нескольким элементам ListView, и когда она проверяется на тот же флажок, не проверяет другое.

Другие советы

Этот слушатель состояния изменения действовал, только тогда, когда вы прокрутите список, потому что его вызов GetView снова, который изменяет проверяемое флажок, поэтому CheckchangedListner Call, который изменяет значение в базе данных.И когда вы использовали OnClick вашу проблему, разрешенную, поскольку вы изменяете ListView View View OnClick событие не запускается, что не изменяет значение базы данных.

Вы можете решить эту проблему с помощью просмотра в ListView.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top