2016-01-23 2 views
0

У меня есть настроенное представление списка, и каждая строка списка содержит флажок и текстовое поле. Нажав на любой флажок в любой строке списка, вы должны отключить другие флажки. Как это сделать.Android: как отключить флажок в представлении списка на основе какого-то условия

+0

проверьте здесь - http://stackoverflow.com/questions/9844061/android-how-do-enable-disable-a-checkbox-depending-on-a- radio-button-being-s – Tasos

ответ

0

объявить список элементов списка. Внутри вашего пользовательского адаптера в методе getView:

положить флажок внутри arraylist.

if(your condition==true) { 

    for(CheckBox c: lsitOfCheckBox){ 
     c.setEnabled(false); 
    } 

} 
+0

Но если я это сделаю, он отключит только тот флажок, который я нажал. Я хочу отключить другие флажки в списке, если установлен флажок любой строки. – Abhishek

+0

Обновленный ответ может помочь. – Krishna

0

Внутри пользовательского адаптера в методе GetView:

if(your condition==true){ 
     checkBox.setEnabled(false); 
} else { 
     checkBox.setEnabled(true); 
} 
0

Прежде всего, вы должны использовать вид ресайклер, это намного лучше и практичнее, чем ListView.

Для этого вам необходимо иметь собственный класс адаптеров, который распространяется от BaseAdapter.

Вам нужен список списка для вашего адаптера для повторного перебора. И в вашем custommodel вам нужно добавить новое поле под названием private boolean selected'.

Затем вам необходимо определить onclick listeners для флажка в методе getview() адаптера.

Затем в методе onclicklistener.onclick вы должны получить позицию щелкнутого элемента. И перебирать все ваши данные и установить 'item.selected = false;' и установить только list[clickPosition].selected = true;

Затем вызовите notifyDataSetChanged();

Я надеюсь, что это ясно для вас, если не пост еще некоторые данные.

0

Сначала я предлагаю использовать RecyclerView, я отвечу на вопрос о ListView, но в любом случае решения будут похожи.

Предполагая, что вы используете ViewHolder pattern в своем базовом адаптере. Внутри вашей функции GetView установить onCheckedChangedListener и внутри, которые создают функцию, которая устанавливает в isListChecked логическое внутри класса, который реализует интерфейс вашего адаптера для setListChecked, должен выглядеть примерно так:

cbListItem.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
      myInterface.setListChecked(isChecked); 
      notifyDatasetChanged(); 
     } 
    } 
);  

Внутри GetView вы также должны проверить isListChecked boolean и установите это как состояние CheckBox