如何避免已选中的ToggleButton被点击后取消选中状态?
当前使用两个ToggleButton切换Fragment时,存在点击已选中按钮会取消选中的问题,不符合“仅能切换到另一个按钮,点击已选中按钮无操作”的需求,可通过以下两种方式解决:
方式一:修改ToggleButton的状态监听逻辑
在每个ToggleButton的OnCheckedChangeListener中,处理取消选中的情况:当要取消当前按钮选中状态时,若另一个按钮未选中,则强制保持当前按钮的选中状态。
修改后的代码如下:
appsToggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { if(checked) { favToggleButton.setChecked(false); loadFrag(new AppDrawerGridFragment(), 1); } else { // 若另一个按钮未选中,强制保持当前按钮选中 if(!favToggleButton.isChecked()) { compoundButton.setChecked(true); } } } }); favToggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { if(checked) { appsToggleButton.setChecked(false); loadFrag(new FavouriteAppsFragment(), 1); } else { // 若另一个按钮未选中,强制保持当前按钮选中 if(!appsToggleButton.isChecked()) { compoundButton.setChecked(true); } } } });
方式二:使用RadioGroup实现互斥选择(推荐)
RadioGroup天生支持互斥选择,点击已选中的RadioButton不会取消选中,更贴合需求,代码也更简洁:
1. 修改布局文件
将两个ToggleButton替换为RadioButton并放入RadioGroup:
<RadioGroup android:id="@+id/radio_group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <RadioButton android:id="@+id/apps_radio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="应用" android:checked="true"/> <RadioButton android:id="@+id/fav_radio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="收藏"/> </RadioGroup>
2. 监听RadioGroup选中事件
在Activity中添加监听逻辑:
RadioGroup radioGroup = findViewById(R.id.radio_group); radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { if(checkedId == R.id.apps_radio) { loadFrag(new AppDrawerGridFragment(), 1); } else if(checkedId == R.id.fav_radio) { loadFrag(new FavouriteAppsFragment(), 1); } } });
内容的提问来源于stack exchange,提问作者Dev_Cob
相关产品推荐
相关产品推荐

