Итак, мой вопрос заключается в регистрации щелчков checkBox в спискеView. В идеале я хочу что-то по строкам всего представления, заставляя checkBox включать/выключать. Единственный способ, с помощью которого я вижу эту работу, - это использовать функцию getView()
, используя запас convertView
с setOnClickListener
, а затем вручную найти, какой вид и сменить checkBox. Есть ли способ лучше? Это кажется очень неэффективным.Лучший способ зарегистрировать checkbox в спискеView
0
A
ответ
0
Я сделал это так же, как вы описали. В документе XML, который вы надуть внутри getView()
метода вашего адаптера, добавьте этот атрибут:
android:onClick="myMethod";
Тогда в вашей деятельности, объявить MyMethod, как это:
public void myMethod(View v) {
CheckBox cb = (CheckBox) v.findViewById(R.id.targetId);
cb.setChecked(!cb.isChecked);
}
1
То, что вы могли бы сделать, это определить настраиваемое представление:
checkable_row_view.xml:
<LinearLayout>
<Checkbox
android:id="@+id/checkbox/>
<TextView
android:id="@+id/textview/>
</LinearLayout>
public class CustomListviewItem extends LinearLayout implements Checkable{
private TextView text;
private Checkbox checkbox;
private MyObject myObject; //the model class of the items you're displaying
public CustomListviewItem(Context context){
super(context);
}
public CustomListviewItem(Context context, AttributeSet attrs){
super(context, attrs);
LayoutInflater inflater = LayoutInflater.from(context);
inflater.inflate(R.layout.checkable_row_view, this);
text = findViewById(...);
checkbox = findViewById(...);
}
@Override
public boolean isChecked(){
return myObject.isChecked();
}
@Override
public void setChecked(boolean checked){
myObject.setChecked(checked);
checkbox.setChecked(checked);
}
@Override
public void toggle(){
myObject.setChecked(!myObject.isChecked());
checkbox.setChecked(!checkbox.isChecked());
}
public void setText(String text){
this.text.setText(text);
}
public void setMyObject...
}
custom_item_view.xml:
<my.awesome.CustomListviewItem
width and height stuff here... />
в адаптере:
static class ViewHolder{
public CustomListviewItem customListviewItem;
}
@Override
public View getView(position, convertView, parent){
//do viewholder stuff
holder.customListviewItem.setText(theText);
holder.customListviewItem.setChecked(shouldBeChecked)
}
Убедитесь, что установлен режим выбора вашего ListView в CHOICE_MODE_MULTIPLE и использовать R.layout.custom_item_view в качестве макета элемента в адаптере.
Смежные вопросы
- 1. AS3: Лучший способ зарегистрировать прослушиватели
- 2. Лучший способ зарегистрировать пользователя в Django
- 3. Лучший способ зарегистрировать событие в Angular
- 4. Лучший способ зарегистрировать время начала процесса?
- 5. Лучший способ зарегистрировать JS модульности в пользовательский элемент управления
- 6. Какой лучший способ распечатать проверочный checkBox в html?
- 7. Лучший способ зарегистрировать различные типы пользователей asp.net mvc
- 8. Лучший способ для Получение значения из Clicked Checkbox с JQuery
- 9. Каков наилучший способ зарегистрировать обслуживание в Consul
- 10. Выберите строку в спискеView
- 11. Показать изображения в спискеView
- 12. Горизонтальная прокрутка в спискеView
- 13. Обтекание столбцов в спискеView в Android?
- 14. Лучший способ зарегистрированного события в WPF
- 15. Как иметь ссылку на элемент в спискеView
- 16. лучший способ сохранить чат-сообщения в mongodb?
- 17. Лучший способ глобального регистрации ClientScript?
- 18. Лучший способ в Python
- 19. Не меняйте имя в спискеView
- 20. Изменение динамических элементов в спискеView
- 21. Android - прокрутка вниз в спискеView
- 22. Лучший способ зарегистрировать время, когда атрибут был изменен в записи в Rails?
- 23. Есть ли способ зарегистрировать запросы в SQLite?
- 24. Какой лучший способ обновить интерфейс в фрагменте?
- 25. AngularJS - Лучший способ повторить создание COLS
- 26. Лучший способ установить флажок «выбрать все»
- 27. В том числе объявления AdMobs в спискеView
- 28. Любой способ получить значение checkbox
- 29. Какой способ входа в PHP - лучший способ?
- 30. Отключить изменение флажка в спискеView android
Это довольно элегантно. Я использую фрагменты, и я хочу, чтобы флажок был установлен на щелчке строки в спискеView, а не только на checkbox. Будет ли этот метод по-прежнему работать для этой ситуации? – cj1098
Да, если вы установите атрибут 'onClick' в макет, который заполняет AdapterView, тогда он будет срабатывать независимо от того, что вы нажимаете, пока объект, на который вы щелкнете (является дочерним), соответствует макету, который использует' myMethod (View v) 'как метод onClick. – NitroNbg