You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在RecyclerView倒计时结束后仅调用一次Web服务加载数据?

解决RecyclerView倒计时结束时仅调用一次Web服务的问题

看起来你现在遇到的问题是Adapter里的getAllResturant("")被反复自动调用,而你希望它只在倒计时结束时执行一次对吧?我来帮你梳理下代码里的问题,然后给出具体的修复方案。

问题分析

从你的代码来看,核心问题有两个:

  1. 当任意一个ViewHolder的倒计时结束时,都会触发tmr.cancel()和getAllResturant(""),如果有多个item同时结束倒计时,就会导致这个方法被调用多次。
  2. 没有一个全局标记来控制getAllResturant的执行次数,只要有item倒计时结束就会触发。

修复方案

我们可以通过添加一个全局标记来确保getAllResturant只执行一次,同时优化Timer和ViewHolder的状态管理:

步骤1:添加全局控制标记

在你的TimerListAdapter类中添加以下变量,用来标记刷新状态并初始化Timer和Handler:

private boolean isDataRefreshed = false; // 标记是否已执行过getAllResturant
private Timer tmr = new Timer(); // 确保Timer已初始化
private Handler mHandler = new Handler(Looper.getMainLooper()); // 绑定主线程,避免UI操作异常

步骤2:修改倒计时结束的逻辑

在ResturantDashboardViewHolder的updateTimeRemaining方法中,修改else分支的代码,加入标记判断:

else {
    // 检查是否已经刷新过数据,确保只调用一次
    if (!isDataRefreshed) {
        isDataRefreshed = true;
        tmr.cancel(); // 停止全局Timer
        // 确保在主线程调用getAllResturant(如果涉及UI操作或网络回调)
        mHandler.post(() -> getAllResturant(""));
    }
    // 更新UI为倒计时结束状态
    tvMinutes.setText("00");
    tvSeconds.setText("00");
}

步骤3:处理Adapter生命周期,避免内存泄漏

添加onDetachedFromRecyclerView方法,在Adapter与RecyclerView解绑时清理Timer和Handler,防止内存泄漏:

@Override
public void onDetachedFromRecyclerView(@NonNull RecyclerView recyclerView) {
    super.onDetachedFromRecyclerView(recyclerView);
    if (tmr != null) {
        tmr.cancel();
        tmr = null;
    }
    mHandler.removeCallbacks(updateRemainingTimeRunnable);
}

步骤4:数据更新后重置标记

当你通过getAllResturant获取新数据并更新Adapter时,记得重置isDataRefreshed标记,这样下次倒计时结束时还能正常触发刷新:

private void getAllResturant(String param) {
    // 你的网络请求逻辑(建议放在子线程执行)...
    // 请求成功后更新数据
    resturantList = newData;
    notifyDataSetChanged();
    isDataRefreshed = false; // 重置标记,允许下次倒计时触发刷新
}

额外优化建议

  • 如果你希望每个item的倒计时是独立的(而非全局统一倒计时),应该为每个ViewHolder单独管理倒计时(比如用CountDownTimer),绑定ViewHolder时启动独立倒计时,回收时取消,同时依然用全局标记确保getAllResturant只执行一次。
  • 网络请求getAllResturant务必放在子线程中执行,避免阻塞主线程,请求完成后再回到主线程更新RecyclerView数据。

内容的提问来源于stack exchange,提问作者Vishal Vaishnav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:36:52