android - 如何使 RecyclerView 项目不可点击?

标签 android android-recyclerview

我尝试了以下代码:

view.setEnabled(false);
myReqRecyclerView.setEnabled(false);

第一行禁用当前点击的 View 。单击一次后,我想将所有项目设置为不可单击,这样就不会发生双击。 第二行好像不行。

最佳答案

第一个简单选项

但实际上使用系统时间会很糟糕:

 long mLastClickTime = 0;

    youradapter.setOnItemClickListener(new youradapter.OnItemClickListener() {
        @Override
        public void onItemClick(int position) {

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

            ....//your code


        }
    });

但为了干净的编程,我建议这样做:

有点棘手但同样简单

在你的Adapter中引入一个boolean变量,请注意viewHolder()和onBindViewHolder()方法:

private boolean clickable = true;


@Override
public void onBindViewHolder(@NonNull myAdapter.ViewHolder viewHolder, int position) {

    if (!clickable){
        viewHolder.cardView.setClickable(false);
    } else {
        viewHolder.cardView.setClickable(true);
    }

    //....
}

public void setClickable(boolean clickable) {
    this.clickable = clickable;
    myadapter.notifyDataSetChanged();
}

public static class ViewHolder extends RecyclerView.ViewHolder {

    CardView cardView;

    public ViewHolder(View itemView, final myViewHolder.OnItemClickListener listener){
        super(itemView);
        //..

        cardView = itemView.findViewById(R.id.cardView);

        cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (listener != null) {
                    int position = getAdapterPosition();
                    if (position != RecyclerView.NO_POSITION) {
                        listener.onItemClick(position);
                    }
                }
            }
        });
    }
}

并根据需要使用 myadapter.setClickable(state)

像这样:

    youradapter.setOnItemClickListener(new youradapter.OnItemClickListener() {
        @Override
        public void onItemClick(int position) {

            myadapter.setClickable(false);

            ....//your code


        }
    });

也许在你的 onResume() 中:

 myadapter.setClickable(true);

关于android - 如何使 RecyclerView 项目不可点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33951399/

相关文章:

java - Android平台的R.id是如何生成的?

java - Achartengine 的饼图不会从重绘功能刷新

android - OpenGL ES 3.0 遮挡查询始终结果为 false

java - 高效更新 RecyclerView 网格或以其他方式显示复杂网格

java - 无法解析 ChildAdapter

android - 从 Android 中的 RecyclerView 中删除焦点指示器

android - 在 android logcat 中缺少一些日志信息。如何查看所有日志 cat 详细信息/数据或保存在文件中?

android - 如果为自定义任务注册了警报(作为提醒),那么当任务被删除时,警报会被删除吗?

android - 从 RecyclerView 中分离 ItemTouchHelper

java - 如何获取 Recycler View 中的 TextView 并将其发送到另一个 Activity 并将其添加到数组列表值中