CheckBox.setChecked()正在执行但未在屏幕上显示

时间:2018-05-23 15:00:46

标签: android checkbox

我在textview上使用onClickListener来复选框上的setCheck()并保存一个值,同时清除itemStateArray中的最后一个检查项,这是一个SparseBooleanArray。代码正在执行,但未显示正在检查的复选框。

textView.setOnClickListener(v -> {
            int adapterPosition = getAdapterPosition();
            if (!itemStateArray.get(adapterPosition, false)) {
                if (first) {
                    checkBox.setChecked(true);
                    first = false;
                    lastChecked = checkBox;
                } else {
                    if (checkBox.isChecked() && lastChecked != null) {
                        lastChecked.setChecked(false);
                        checkBox.setChecked(true);
                        lastChecked = checkBox;
                    }
                }
                itemStateArray.clear();
                itemStateArray.put(adapterPosition, true);

            } else {
                checkBox.setChecked(false);
                itemStateArray.clear();
                itemStateArray.put(adapterPosition, false);

            }
        });

我在textview上设置了监听器,因为我想点击较大的textview,而不是屏幕一侧的较小复选框。

单击该项目并向下滚动并向上滚动后,该项目将显示为已选中。我正在设置onBindViewHolder中的复选框 使用以下代码:

holder.bind(position);

我传递已检查位置的绑定函数:

void bind(int position) {
            if (!itemStateArray.get(position, false)) {
                checkBox.setChecked(false);
            } else {
                checkBox.setChecked(true);
                lastChecked = checkBox;
            }
        } 

屏幕上不显示动画复选框。

1 个答案:

答案 0 :(得分:1)

您正在使用listView / RecyclerView吗? 我认为实现这一目标的最佳方法是使用方法

告诉视图刷新该行
recyclerView.notifyItemChanged(int)

其中int是切换che复选框的行的位置。