Выполнение 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
}
}
});