У меня есть 3 флажка и текстовых представлений, я хочу отслеживать, сколько флажков установлено и какие, а также отображать окончательный результат в текстовом представлении при нажатии кнопки. Как я могу это сделать?

0
blackHawk 19 Июл 2017 в 20:30

3 ответа

Допустим, у вас есть родительский LinearLayout и три флажка.

Создайте ссылку на LinearLayout.

LineaLayout linearLayout = (LinearLayout) findVIewById(R.id.lv);

Затем CheckBox заявляет, что вам нужно пройти через ChildViews linearlayout.

Что-то типа,

for (int i = 0; i < linearLayout.getChildCount(); i++) {
    View v = linearLayout.getChildAt(i);
    if (v instanceof CheckBox) {
      if (((CheckBox) v).isChecked())
      // Check Checkbox
      else
      // Unchecked Checkbox
    } 
}
0
huk 19 Июл 2017 в 20:37

Чтобы определить, отмечен ли CheckBox, вы можете позвонить myCheckbox.isChecked(). Чтобы установить значение TextView, вы можете вызвать myTextView.setText(). А чтобы что-то делать при нажатии Button, вы можете добавить View.OnClickListener с помощью myButton.setOnClickListener().

Вместе это означает, что вы можете создать такую ​​программу:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final CheckBox checkBox1 = (CheckBox) findViewById(R.id.checkbox1);
        final CheckBox checkBox2 = (CheckBox) findViewById(R.id.checkbox2);
        final CheckBox checkBox3 = (CheckBox) findViewById(R.id.checkbox3);
        final TextView textView = (TextView) findViewById(R.id.text);

        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int count = 0;

                if (checkBox1.isChecked()) {
                    ++count;
                }

                if (checkBox2.isChecked()) {
                    ++count;
                }

                if (checkBox3.isChecked()) {
                    ++count;
                }

                textView.setText("How many checked? " + count);
            }
        });
    }
}
0
Ben P. 19 Июл 2017 в 20:39
И как определить, какие флажки установлены?
 – 
blackHawk
19 Июл 2017 в 20:40
Что ты имеешь в виду? Код включает if (checkBox1.isChecked()) ... так вы определяете, отмечен ли checkBox1.
 – 
Ben P.
19 Июл 2017 в 20:47

Лучший подход - использовать listview:

Сначала создайте ListView и создайте настраиваемый адаптер с флажком в каждой строке.

В адаптере есть Set<Integer> indexes = new HashSet<Integer>()

В методе getView (): getView (int position, View convertView, ViewGroup parent)

Назначьте прослушиватель кликов для флажка:

checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
       @Override
       public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) 
       {
          if(isChecked){
             indexes.add(position); 
          }else{
             indexes.remove(position);
          }

       }
   }
); 

Наконец, просто войдите в набор, и вы получите длину набора, то есть количество выбранных флажков, а значения представляют положение выбранного флажка.

0
Ashray P. Shetty 19 Июл 2017 в 21:01