У меня была такая же проблема с моим представлением переключателя.После долгих поисков и прочтений я выяснил, что эта проблема является результатом своего рода оптимизации представлений, продвигаемых Android.Попытка повторно использовать виды объектов.Таким образом, в основном, когда вы нажимаете на переключатель или флажок, вы запускаете обратный вызов изменений и в другом представлении.Оптимизация действительно работает, но если вы не обращаете внимания или просто не знаете, как себя вести (например, я), происходят довольно странные результаты.
В любом случае, я нахожу это простое решение:
Рекомендуется повторно использовать convertView, переданный методу getView ().Таким образом вы оптимизируете количество оперативной памяти, используемое списком.Поэтому я храню свои представления в ViewHolder и программирую событие onCheckedChanged.Хитрость заключается в том, что перед установкой, если переключатель проверен или нет (в вашем случае, установите флажок) и определите прослушиватель CheckedChange, я просто сбрасываю обратный вызов с нулем, это гарантирует, что событие другого переключателя не будет запущено.1005 *
Вот фрагмент:
...
viewHolder.switchView.setOnCheckedChangeListener(null);
viewHolder.switchView.setChecked(myObject.getStatus() > 0);
...
viewHolder.switchView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
...
}
});
myObject - это конечный объект, в котором хранятся данные курсора.
И независимо от того, будет ли переключатель проверен или нет, у вас естьвызвать метод setChecked.
Надеюсь, это кому-нибудь поможет!