如何实现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); } } }
关键改进点说明
- 集合管理选中状态:
HashSet<String>可以轻松判断某个星期是否被选中,添加/移除操作简洁高效。如果需要保持星期的顺序(比如从周日到周六),可以换成LinkedHashSet。 - 统一更新逻辑:把更新TextView的代码抽成单独方法,避免重复代码,逻辑更清晰。
- 按钮状态反馈:添加了可选的按钮样式修改,用户能直观看到哪个按钮处于选中状态(你可以换成自己的自定义样式)。
- 默认文本处理:当集合为空时,自动设置TextView为"Never",完美符合需求。
内容的提问来源于stack exchange,提问作者Nikson
相关产品推荐
相关产品推荐

