You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现TextView追加星期文本、单独移除指定项,全取消显示Never?

解决Android星期选择按钮的追加/移除文本问题

我懂你的困扰!你现在的代码每次点击按钮都会直接替换TextView内容,完全没实现"追加选中项、单独移除指定项"的功能,也没处理所有按钮都取消时显示"Never"的逻辑。咱们一步步把它修复好:

核心思路

用一个集合来记录当前选中的星期,这样添加、移除和判断是否存在都会非常方便。每次点击按钮时,先操作这个集合,再根据集合内容统一更新TextView的显示:

  • 集合为空 → 显示默认文本"Never"
  • 集合不为空 → 把集合里的星期拼接成字符串展示

修改后的完整代码

public class CreateAlarm extends Activity implements View.OnClickListener {
    private Button mbtn_Sun, mbtn_Mon, mbtn_Tue, mbtn_Wed, mbtn_Thu, mbtn_Fri, mbtn_Sat;
    private TextView mRepeat;
    // 用HashSet记录选中的星期,自动去重,判断存在性效率高
    private Set<String> selectedDays = new HashSet<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create_alarm);
        
        mRepeat = (TextView) findViewById(R.id.mRepeat);
        mbtn_Sun = (Button) findViewById(R.id.mbtn_Sun);
        mbtn_Mon = (Button) findViewById(R.id.mbtn_Mon);
        mbtn_Tue = (Button) findViewById(R.id.mbtn_Tue);
        mbtn_Wed = (Button) findViewById(R.id.mbtn_Wed);
        mbtn_Thu = (Button) findViewById(R.id.mbtn_Thu);
        mbtn_Fri = (Button) findViewById(R.id.mbtn_Fri);
        mbtn_Sat = (Button) findViewById(R.id.mbtn_Sat);
        
        // 绑定点击事件(简化写法,不用强制类型转换)
        mbtn_Sun.setOnClickListener(this);
        mbtn_Mon.setOnClickListener(this);
        mbtn_Tue.setOnClickListener(this);
        mbtn_Wed.setOnClickListener(this);
        mbtn_Thu.setOnClickListener(this);
        mbtn_Fri.setOnClickListener(this);
        mbtn_Sat.setOnClickListener(this);

        // 初始化取消按钮(原代码遗漏了findViewById,这里补上)
        Button mCancel = findViewById(R.id.mCancel);
        mCancel.setOnClickListener(v -> finish());
    }

    @Override
    public void onClick(View v) {
        String day = "";
        // 获取当前点击按钮对应的星期文本
        switch (v.getId()) {
            case R.id.mbtn_Sun:
                day = "Sun";
                break;
            case R.id.mbtn_Mon:
                day = "Mon";
                break;
            case R.id.mbtn_Tue:
                day = "Tue";
                break;
            case R.id.mbtn_Wed:
                day = "Wed";
                break;
            case R.id.mbtn_Thu:
                day = "Thu";
                break;
            case R.id.mbtn_Fri:
                day = "Fri";
                break;
            case R.id.mbtn_Sat:
                day = "Sat";
                break;
        }

        // 处理选中/取消选中逻辑
        if (selectedDays.contains(day)) {
            selectedDays.remove(day);
            // 可选:取消选中时恢复按钮默认样式,给用户直观反馈
            ((Button)v).setBackgroundResource(android.R.drawable.btn_default);
        } else {
            selectedDays.add(day);
            // 可选:选中时改变按钮样式,提示用户当前状态
            ((Button)v).setBackgroundResource(android.R.drawable.btn_default_pressed);
        }

        // 统一更新TextView显示
        updateRepeatTextView();
    }

    // 抽离更新TextView的逻辑,代码更简洁易维护
    private void updateRepeatTextView() {
        if (selectedDays.isEmpty()) {
            mRepeat.setText("Never");
        } else {
            // 把集合里的星期拼接成逗号分隔的字符串,比如"Sun, Mon, Tue"
            String repeatText = String.join(", ", selectedDays);
            mRepeat.setText(repeatText);
        }
    }
}

关键改进点说明

  1. 集合管理选中状态:HashSet<String> 可以轻松判断某个星期是否被选中,添加/移除操作简洁高效。如果需要保持星期的顺序(比如从周日到周六),可以换成LinkedHashSet。
  2. 统一更新逻辑:把更新TextView的代码抽成单独方法,避免重复代码,逻辑更清晰。
  3. 按钮状态反馈:添加了可选的按钮样式修改,用户能直观看到哪个按钮处于选中状态(你可以换成自己的自定义样式)。
  4. 默认文本处理:当集合为空时,自动设置TextView为"Never",完美符合需求。

内容的提问来源于stack exchange,提问作者Nikson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:35:41