У меня есть 3 флажка и текстовых представлений, я хочу отслеживать, сколько флажков установлено и какие, а также отображать окончательный результат в текстовом представлении при нажатии кнопки. Как я могу это сделать?
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
}
}
Чтобы определить, отмечен ли 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);
}
});
}
}
Лучший подход - использовать 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);
}
}
}
);
Наконец, просто войдите в набор, и вы получите длину набора, то есть количество выбранных флажков, а значения представляют положение выбранного флажка.
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].
if (checkBox1.isChecked())
... так вы определяете, отмечен лиcheckBox1
.