3

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

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

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

4

2 回答 2

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当链接被触摸时,即使是分支也会闪烁复选框,所以我猜这是你可以做的最好的事情,而不是编写自己的复选框小部件。

于 2019-01-05T22:55:32.997 回答
-2

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

checkBoxView.setMovementMethod(LinkMovementMethod.getInstance());

你已准备好出发。

于 2019-10-23T20:43:31.973 回答