2015-07-13 1 views
3

Я использовал изображениеView и флажок над представлением изображения как одну строку в RecyclerView. Я установил фон флажка, как показано ниже. После отображения строк, когда я устанавливаю флажок для определенной позиции, изображение меняется в этой позиции, но одновременно тот же эффект возникает и в какой-то другой позиции, которую я не проверял.CheckBox в RecyclerView не работает должным образом

Помогите разобраться в ошибке, я не понимаю, что случилось.

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_checked="true" 
    android:drawable="@drawable/ic_love_dark_red" /> <!-- pressed --> 
<item android:state_checked="false" 
    android:drawable="@drawable/ic_love_holo_blank" /> <!-- focused --> 
<item android:drawable="@drawable/ic_love_holo_blank" /> 
</selector> 
+2

Если вы используете флажок в listview или recycleview, я предлагаю вам использовать sparsebooleanarray, с помощью которого вы можете отслеживать состояния флажков. Ссылка: http://developer.android.com/reference/android/util/SparseBooleanArray.html – Srijith

+2

Какие товары вы используете в своем адаптере? У них есть поле для представления своего состояния (проверено, не отмечено)? Ваша проблема заключается в том, что переработанное представление должно установить флажок обратно в его неконтролируемое состояние, но вам нужен способ узнать, какие элементы отмечены, а какие нет. – Onheiron

+0

@ Onheiron Я только что разработал макет, я не выполнял никаких функций. В классе адаптера, в методе onCreateViewHolder(), я только что запустил макет для этого флажка. – rahul

ответ

2

Вы не могут иметь эту функциональность (изменить изображение на изменения состояния) сделал в XML-файле, так как один экземпляр CheckBox виджета будет использоваться несколько раз в вашем RecyclerView, в зависимости от размера данных, которые он отображает. В принципе, RecyclerView использует шаблон View Holder (о котором я приглашаю вас прочитать, если вы не знакомы с ним), тем самым делая изменение изображения несколькими рядами. Что вам нужно сделать:

  • иметь «IsChecked» атрибут Вашего объекта, из которого сделан список данных
  • реализовать на изменения состояния для флажка и синхронизировать недавно обновленное состояние с isChecked текущего объекта
  • , когда вы привязываете свой держатель, проверяете, является ли флаг истинным или ложным, и обновите макет в соответствии с флагом.

Надеюсь, вы получите его на работу, ура!

+0

спасибо, у меня проблема, вы были правы. Теперь позвольте мне попытаться реализовать свой путь. – rahul

+0

Добро пожаловать :) Просто реализуйте это самостоятельно, это будет только в первый раз, когда вы попытаетесь понять это – DDsix