如何防止快速双击复选框?

时间:2018-12-29 11:50:43

标签: java android

我在 RecyclerView 中的复选框有一个奇怪的问题。

当我单击一次时,一切运行正常(移动和更改样式),但是当我单击两次(足够快)时,它将执行部分代码(仅向下移动并取消选中)。我想阻止它,但我不知道如何。

我从这里https://stackoverflow.com/a/16514644/10802597尝试了解决方案,但是它使情况变得更糟(也许我做错了方法)。

这是我的代码:

holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            int currentPosition = holder.getAdapterPosition();
            if(isChecked){
                    FinalListItem finalItemBefore = finalListItems.get(currentPosition);
                    FinalListItem finalItemAfter = new FinalListItem(finalItemBefore.getName(), true);
                    finalListItems.remove(finalItemBefore);
                    finalListItems.add(finalItemAfter);
                    recyclerView.scrollToPosition(0);
                    holder.linearLayout.setBackgroundResource(R.drawable.listitem_green);
                    notifyItemMoved(currentPosition, getItemCount() - 1);

            }
            else{
                finalListItems.get(currentPosition).setChecked(false);
                notifyItemChanged(currentPosition);
            }

        }
    });

Here is image which shows how i want to do it

1 个答案:

答案 0 :(得分:0)

您可以使用

private long mLastClickTime = 0;
     if (SystemClock.elapsedRealtime() - mLastClickTime < 1000) {
                        return;
                    }
                    mLastClickTime = SystemClock.elapsedRealtime();

在您的点击内,它将阻止另一次点击1秒钟

但是不要在您的复选框方法中使用它,因为从我可以看到它的适配器,所以请为整个行设置ID并将此方法放在行上单击。