Моя проблема в том, что я хочу создать контрольный список с несколькими флажками. Самая большая проблема у меня есть более 100 флажков. Я хотел бы кнопку CLEAR, которая очищает все флажки, нажав.

Как я могу это сделать? И есть ли у вас пример, как это решить?

Я знаю только так:

Button clear = (Button) findViewById(R.id.clearbtn);
    clear.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            CheckBox cb1 = (CheckBox) findViewById(R.id.checkBox2);
            cb1.setChecked(false);
        }
    });

Но этот способ не очень эффективен с более чем 100 флажками ...

0
AkEgo 28 Май 2017 в 11:55

2 ответа

Лучший ответ

Если вы сохраняете все флажки в одной ViewGroup, то это можно сделать, получив все дочерние элементы этой ViewGroup и сняв флажок. Например, «родитель» - это макет, который содержит все флажки. Вы можете снять все галочкой:

 for (int i = 0; i < parent.getChildCount(); i++) {
        View view = parent.getChildAt(i);
        if (view instanceof CheckBox) {
            ((CheckBox) view).setChecked(false);
        }
    }
0
Hammad Akram 28 Май 2017 в 10:44

Я должен решить это. Спасибо @Tuby и @android_hub за идею с getChildCount () .
И особая благодарность @Hammad Akram. Теперь это работает: D. Мой код сейчас:

    final LinearLayout ll = (LinearLayout)findViewById(R.id.ll_a320_main);
    final int ccount = ll.getChildCount();

    Button clear = (Button)findViewById(R.id.btn_a320_clear);
    clear.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //Toast.makeText(ACT_A320.this, "Child: "+ccount,Toast.LENGTH_LONG).show(); -- Test for checking count of Child
            for(int i=1; i<ccount;i++){
                v = ll.getChildAt(i);
                if(v instanceof CheckBox ){
                    ((CheckBox) v).setChecked(false);
                }
            }
        }
    });

Теперь все флажки будут обнаружены и установлены в false.

0
AkEgo 28 Май 2017 в 10:48