Представление списка Android: как наложить ограничения между элементами списка
Я реализую приложение для Android, в котором у меня есть представление списка. Каждый элемент этого списка имеет кнопку переключения, и, используя специальный адаптер, который расширяет BaseAdapter, мне удалось узнать, какие кнопки переключения проверены, а какие нет. Но что, если я хотел наложить ограничения на эти кнопки переключения? Предположим, что когда я проверяю вторую кнопку переключения, я хочу, чтобы первая тоже автоматически проверялась. Как я должен сделать? Спасибо
public class MyCustomAdapter<T> extends BaseAdapter {
Context mContext; //the application context
LayoutInflater mInflater; //object that is used to set the layout of the View
ArrayList<T> mList; //list of the items shown in the user interface
SparseBooleanArray mSparseBooleanArray; //object that is used to keep track of the selected items of the list
ToggleButton[] toggleButtons;
public MyCustomAdapter(Context context, ArrayList<T> list) {
this.mContext = context;
mInflater = LayoutInflater.from(mContext);
mSparseBooleanArray = new SparseBooleanArray();
mList = new ArrayList<T>();
this.mList = list;
toggleButtons = new ToggleButton[list.size()];
}
public View getView (int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = mInflater.inflate(R.layout.list_item_with_toggle, null);
}
toggleButtons[position] = (ToggleButton)convertView.findViewById(R.id.toggleEnable);
switch (position){
case 0:
toggleButtons[position].setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Toast.makeText(mContext, ""+0, Toast.LENGTH_SHORT).show();
}
});
break;
case 1:
toggleButtons[position].setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//Toast.makeText(mContext, ""+isChecked, Toast.LENGTH_SHORT).show();
if(isChecked) {
if(!toggleButtons[0].isChecked()) {
// Toast.makeText(mContext, "elemento 1 "+toggleButtons[1].isChecked(), Toast.LENGTH_SHORT).show();
toggleButtons[0].setChecked(true);
} else {
//things to do if toggleButtons[0] == true
}
} else {
//things to do if isChecked == false
}
}
});
break;
default:
break;
}
return convertView;
}
}
1 ответ
Предположительно у вас есть какой-то объект, который представляет каждую строку в списке, если вы можете попробовать что-то вроде этого:
- Добавьте список / массив связанных элементов к вашему объекту и заполните его, где это применимо.
- При нажатии кнопки обновите связанные элементы.
- Вызов
notifyDataSetChanged()
и заставить список быть перерисованным.