延迟回收器查看每个项目的单击功能

问题描述 投票:0回答:1

我有一个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,因此单击后变为活动/非活动状态。当用户单击按钮时,按钮变为活动状态,我必须将项目数据(标题,ID)发送到后端。当用户单击非活动按钮时,我向该项目的后端发送删除请求。但是问题在于用户可以多次单击同一按钮,而我不想每次都发送make请求。例如。我可以在一秒钟内按下同一按钮4次,该按钮变为活动/不活动状态,因此我不想在一秒钟内发出4-5个请求。我认为,解决方案是在点击事件上增加延迟,例如单击500ms或1000ms后将数据发送到后端。我尝试使用Handler并确实有效。例如。当我点击第二项,第四项和第五项时,每点击一秒钟,我就可以将数据发送到后端。但是也有一个问题。当我多次单击同一按钮时,一秒钟后它将发送到后端多个请求。我已经尝试在启动处理程序之前对每次单击执行removeCallbacksAndMessages(),但也存在另一个问题。例如。当我在第二项上多次单击后,在单击第三项时,我仅将第三项数据发送到后端。但是我想将第二项和第三项数据发送到后端。那么有人可以帮助我实现此功能吗?

java android android-recyclerview handler
1个回答
0
投票
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

© www.soinside.com 2019 - 2024. All rights reserved.