java - 延迟回收器查看每个项目的点击功能

标签 java android android-recyclerview handler

我有一个recyclerview。我想实现一项功能,但无法实现。 我的 RecyclerView 项目有 2 个 textView 和一个 button

public class Task {

private String id;
private String title;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}
}

所以让我解释一下。我的 recyclerView 项目中的按钮使用 stateListDrawable,因此它在单击时变为 Activity/非 Activity 状态。当用户单击按钮并激活按钮时,我必须将项目数据(标题、id)发送到后端。当用户单击非 Activity 按钮时,我向后端发送该项目的删除请求。但问题是用户可以多次单击同一个按钮,我不想每次都发送请求。例如。我可以在一秒钟内按同一个按钮 4 次,它就会变为 Activity/非 Activity 状态,所以我不想在一秒钟内发出 4-5 个请求。我认为,解决方案是在点击事件上添加延迟,例如单击发送数据到后端后 500 毫秒或 1000 毫秒后。我尝试使用 Handler 并且实际上它有效。例如。当我点击第二项、第四项和第五项时,每次点击一秒钟后,我就可以将数据发送到后端。但也有一个问题。当我多次单击同一按钮时,一秒钟后它会向后端发送多个请求。我尝试在启动处理程序之前对每次点击执行 removeCallbacksAndMessages() ,但还有另一个问题。例如。当我多次单击第二项,然后单击第三项时,我仅将第三项数据发送到后端。但我想将第二项和第三项数据发送到后端。那么有人可以帮助我实现这个功能吗?

最佳答案

private long mLastClickTime = 0;

...

// inside onCreate or so:

findViewById(R.id.button).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // mis-clicking prevention, using threshold of 1000 ms
        if (SystemClock.elapsedRealtime() - mLastClickTime < 1000){
            return;
        }
        mLastClickTime = SystemClock.elapsedRealtime();

        // do your magic here
    }
}

请参阅此处了解更多详细信息:Android Preventing Double Click On A Button

关于java - 延迟回收器查看每个项目的点击功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61393826/

相关文章:

android - 滚动时处理 recyclerview 项目的文件上传进度?

java - 迭代 HIDDEN channel 中的 token

java - 将密码字符替换为 JPasswordField 中的点

java - Spring application.properties 文件中的 boolean 值?

Android Gradle Build Plugin 4.0.0 & R8 Desugaring 不适用于 API 19

android - 相对布局错误。 "is not a sibling"

android - 在android中将应用程序移动到真实设备后数据消失

android - 单击对话框按钮出现空点异常错误

java - 当我添加行时,从 AbtractTableModel 扩展的 JTable 不更新 GUI

android - 如何通过ID删除recyclerview项目?