Выполнение Mark All для флажков в Android

Я работаю над проектом Android с большим количеством занятий и классов.

В нескольких макетах у меня есть средство, с помощью которого пользователь может выбрать отметку "все", чтобы были установлены все флажки.

Но проблема, с которой я сталкиваюсь, заключается в том, что я знаю только один способ (который слишком длинен), чтобы сделать это - создав макет markall для каждого из этих существующих макетов, вставив исходный код макета в код макета markall и затем предоставив все флажки как проверено. Это требует от меня создания xmls для всех разметок, а также для каждого макета.

Пожалуйста, скажите мне, как я могу создать один xml для markall, который имеет все отмеченные флажки, а затем вызвать этот макет поверх оригинального макета, когда отмечена отметка all.

2 ответа

Решение

Предположим, у вас есть следующий макет

<LinearLayout
   android:id="@+id/checkbox_container"
   ...params>
   <CheckBox ...params/>
   <TextView ...params/>
   <CheckBox ...params/>
   <SomeView ...params/>
   <CheckBox ...params/>
</LinearLayout>

получите свой checkBoxLayout как это внутри Activity

LinearLayout container = (LinearLayout)findViewById(R.id.checkbox_container);

Переберите дочерние элементы внутри контейнера следующим образом:

for (int i = 0; i < container.getChildCount(); i++){
    View v = container.getChildAt(i);
    if (v instanceof CheckBox){
        CheckBox cb = (CheckBox)v;
        // isChecked should be a boolean indicating if every Checkbox should be checked or not
        cb.setChecked(isChecked)
    }
}
CheckBox MarkAllCheckBox =
    (CheckBox) findViewById( R.id.MarkAllCheckBox);
MarkAllCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
    {
        if ( isChecked )
        {
            checkBox1.setChecked("true");
            checkBox2.setChecked("true");
            checkBox3.setChecked("true");
            //so on
        }
    }
});
Другие вопросы по тегам