Представление списка 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;
}
}

person rosekarma    schedule 27.10.2014    source источник


Ответы (1)


Предположительно у вас есть какой-то объект, который представляет каждую строку в списке, если это так, вы можете попробовать что-то вроде этого:

  • Добавьте список/массив связанных элементов к вашему объекту и заполните его там, где это применимо.
  • При нажатии кнопки обновите связанные элементы.
  • Вызовите notifyDataSetChanged() и принудительно перерисуйте список.
person Philio    schedule 27.10.2014
comment
Извините, я до сих пор не знаю, как это сделать. Будьте терпеливы, пожалуйста. Что я могу сделать, чтобы установить флажок для первого переключателя, как только я установлю флажок для второго переключателя? - person rosekarma; 27.10.2014