【问题标题】:How can i unselect an item if another item is selected?如果选择了另一个项目,我如何取消选择一个项目?
【发布时间】:2021-11-13 14:12:51
【问题描述】:

我有一些意见..我希望如果一个项目被选中,另一个应该自动取消选中。而当(如图所示)时,如果假设此处文本为 100 的第二个项目被选中,则第一个选项应该被取消选中。如何保留所选项目的参考并取消选择其他项目?我在某处了解到单选按钮用于这些..但有人怎么能显示这个?

【问题讨论】:

    标签: android android-layout radio-button


    【解决方案1】:

    每当您调用“选择”方法时,在代码中它应该首先清除您之前存在的所有选择。您可以通过检查每个符合条件的选择的属性/状态然后反转您为选择它所做的操作来做到这一点。您还可以保留对当前选择的引用作为一种 hack,并在进行新选择时不断更新并使用它来取消选择。

    【讨论】:

    • 你能显示一些你所说的代码吗?它会让我的工作蒸蒸日上
    • 好吧,我不知道你做了什么来实现选择或取消选择,所以我真的无法帮助你。您需要包含代码示例
    • 我刚刚放了 onclick 监听器直到现在..点击时我只是设法将轮廓颜色更改为蓝色直到现在..但同样的事情也会发生......如果一个轮廓颜色改变了另一个应该回到灰色..到目前为止我没有做任何其他事情..仍在弄清楚逻辑和实现
    【解决方案2】:

    假设您的意思是通过“选择”更改背景等,您可以遍历父 ViewGroup(例如 ConstraintLayout、LinearLayout 等)并选择您的目标视图并取消选择其余视图,如下面的代码。

    void toggleView(View view, boolean selected) {
        if (selected) {
            view.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(getContext(), R.color.bg_grey_2)));
        } else {
            view.setBackgroundTintList(null);
        }
    }
    
    void selectOneViewAndUnselectOthers(ViewGroup parentView, View viewToSelect) {
        for (int i = 0; i < parentView.getChildCount(); i++) {
            View tmpView = parentView.getChildAt(i);
            if (tmpView.getId() == viewToSelect.getId()) {
                toggleView(viewToSelect, true);
            } else {
                toggleView(tmpView, false);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-30
      • 2020-05-10
      • 2021-02-09
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多