【问题标题】:Clicking on ClickableSpan in CheckBox changes its state单击 CheckBox 中的 ClickableSpan 会更改其状态
【发布时间】:2018-08-21 12:41:34
【问题描述】:

我的复选框中有一个 ImageSpan 和 ClickableSpan 以在复选框文本的末尾显示图标并处理单击它。但是点击它会改变复选框选中状态,这是不需要的。

当用户点击 ClickableSpan 时,如何防止更改复选框状态?

对于 API 16+,我需要一些等效的 cancelPendingInputEvents() 方法。另外我不想将复选框与复选框和文本视图分开。

【问题讨论】:

    标签: android checkbox imagespan


    【解决方案1】:

    您是否使用类似于https://stackoverflow.com/a/47166879/172690 中所述的解决方案?如果是这样,我发现以下onClick 实现是功能性的:

            @Override
            public void onClick(View widget) {
                // Prevent CheckBox state from being toggled when link is clicked
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                    widget.cancelPendingInputEvents();
                } else {
                    if (widget instanceof CheckBox) {
                        CheckBox checkbox = (CheckBox) widget;
                        boolean state = checkBox.isChecked();
                        checkBox.post(new Runnable() {
                            @Override public void run() {
                                checkBox.setChecked(state);
                            }
                        });
                    }
                }
                // Do action for link text...
            }
    

    本质上,状态是在点击处理期间保存的,然后发布以便可以恢复。可以想象,当按下可点击的 spannable 时,复选框会闪烁并设置动画。然而,即使cancelPendingInputEvents 分支在链接被触摸时也会闪烁复选框,所以我猜这是你可以做的最好的事情,而不是编写自己的复选框小部件。

    【讨论】:

      【解决方案2】:

      如果您使用 Spannable String 设置 Checkbox 文本,并且在可跨子文本内使用 onclick 侦听器。您需要做的就是添加这一行,

      checkBoxView.setMovementMethod(LinkMovementMethod.getInstance());
      

      你可以走了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-16
        • 2017-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-18
        • 1970-01-01
        相关资源
        最近更新 更多