首页 > 解决方案 > 如何验证选中了哪个复选框?

问题描述

我是 android 新手,我的应用程序中有 7 个复选框,我已经自定义了它,如图所示。每个复选框代表一周中的一天。

我想要做的是,如果用户单击复选框,则单击复选框的文本应出现在上面的 TextView 上(默认情况下,如果未单击任何复选框,Textview 文本应为“从不”)。

这里的 Textview 文本应该是有序的,我的意思是如果我随机选择所有复选框,但 TextView 文本应该是有序的,比如 Sun,Mon,..... Sat。

我知道如何验证复选框是否被选中,但是当涉及到上述情况时,我不知道应该如何。

谁能帮我得到这个。

  private TreeMap<Integer, String> mAlarmDays = new TreeMap<>();

 public void onClick(View v) {
        switch (v.getId()) {
            case R.id.mSun:
                if (mRepeat.getText().toString().contains("Sun")) {
                    mAlarmDays.remove(0);
                    Toast.makeText(getApplicationContext(),"Sun is clicked",Toast.LENGTH_LONG).show();
                } else
                    mAlarmDays.put(0, "Sun");
                break;
            case R.id.mMon:
                if (mRepeat.getText().toString().contains("Mon")) {
                    mAlarmDays.remove(1);
                } else
                    mAlarmDays.put(1, "Mon");
                break;
            case R.id.mTue:
                if (mRepeat.getText().toString().contains("Tue")) {
                    mAlarmDays.remove(2);
                } else
                    mAlarmDays.put(2, "Tue");
                break;
            case R.id.mWed:
                if (mRepeat.getText().toString().contains("Wed")) {
                    mAlarmDays.remove(3);
                } else
                    mAlarmDays.put(3, "Wed");
                break;
            case R.id.mThu:
                if (mRepeat.getText().toString().contains("Thu")) {
                    mAlarmDays.remove(4);
                } else
                    mAlarmDays.put(4, "Thu");
                break;
            case R.id.mFri:
                if (mRepeat.getText().toString().contains("Fri")) {
                    mAlarmDays.remove(5);
                } else
                    mAlarmDays.put(5, "Fri");
                break;
            case R.id.mSat:
                if (mRepeat.getText().toString().contains("Sat")) {
                    mAlarmDays.remove(6);
                } else
                    mAlarmDays.put(6, "Sat");
                break;
        }
        StringBuilder repeatDays = new StringBuilder();
        if (mAlarmDays.size() == 0) {
            repeatDays = new StringBuilder("Never");
        } else {
            for (String day:mAlarmDays.values()) {
                repeatDays.append(day).append(" ");
            }
        }
        mRepeat.setText(repeatDays.toString());
    }

标签: androidandroid-checkbox

解决方案


我建议为所有复选框创建一个复选框侦听器,它将遍历它们并为 textview 构建字符串

像这样的东西:

CheckBox sunday = ...;
CheckBox monday = ...;
//......
CheckBox saturday = ...;
TextView label = ...;

CompoundButton.OnCheckedChangeListener changeListener = new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        List<String> days = new ArrayList<>();
        if (sunday.isChecked()) {
            days.add("Sun");
        }
        if (monday.isChecked()) {
            days.add("Mon");
        }
        //....
        if (saturday.isChecked()) {
            days.add("Sat");
        }
        if (days.size() != 0) {
            label.setText(TextUtils.join(", ", days));
        } else {
            label.setText("Never");
        }
    }
};

sunday.setOnCheckedChangeListener(changeListener);
monday.setOnCheckedChangeListener(changeListener);
//......
saturday.setOnCheckedChangeListener(changeListener);

推荐阅读