gpt4 book ai didi

android - recyclerview 定期 ui 子更新

转载 作者:行者123 更新时间:2023-11-30 02:08:45 29 4
gpt4 key购买 nike

我有一个项目的 recyclerView,(除其他外)包含从 WS 检索的游戏持续时间的时间戳。为了显示比赛的持续时间,我必须获取当前时间戳,做垫子并将其转换为可读格式(例如:5 分钟 5 秒)。只有部分 View 需要更新。

每个 subview 需要每 xxx 秒更新一次。

  • 我的第一个方法是创建一个绑定(bind)到需要更新的 View 的对象列表。在我的 fragment 上,我会声明一个 Handler 并为列表中的每个对象调用 notifyItemChanged(position)。每次处理程序调用 notifyItemChanged 时,整个 View 都会重新呈现,并且有一个小的闪烁效果。我不希望它发生,所以我的第二种方法是只更改需要更新的每个 childView 的 TextView。这是代码:

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
    if (needsUpdate) {
    holder.startRepeatingTask();
    } else {
    holder.stopRepeatingTask();
    }
    }
    class MyViewHolder extends RecyclerView.ViewHolder {
    private final int mHandlerInterval = 6000;
    private Handler mHandler;
    private Runnable mStatusChecker;

    public MyViewHolder(View itemView) {
    super(itemView);
    ButterKnife.inject(this, itemView);
    mHandler = new Handler();
    mStatusChecker = new Runnable() {
    @Override
    public void run() {
    String gameStatusToPrint = current.getGameStatusToPrint();
    gameStatus.setText(gameStatusToPrint);
    mHandler.postDelayed(mStatusChecker, mHandlerInterval);
    }
    };
    }

    public void startRepeatingTask() {
    mStatusChecker.run();
    }

    public void stopRepeatingTask() {
    mHandler.removeCallbacks(mStatusChecker);
    }
    }

我不确定这是否是最佳方法,需要对此提出建议。

最佳答案

因为 ViewHolder 将被 RecyclerView 回收。您需要确保保持“当前游戏”和列表中显示的项目之间的稳定性。尽管如此,我认为您的解决方案很好。

解决方法如下:

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {

holder.game = mGameList.get(position);
if (needsUpdate) {
holder.startRepeatingTask();
} else {
holder.stopRepeatingTask();
}
}

class MyViewHolder extends RecyclerView.ViewHolder {
private final int mHandlerInterval = 6000;
private Handler mHandler;
private Runnable mStatusChecker;

public Game game;

public MyViewHolder(View itemView) {
super(itemView);
ButterKnife.inject(this, itemView);
mHandler = new Handler();
mStatusChecker = new Runnable() {
@Override
public void run() {
String gameStatusToPrint = game.getGameStatusToPrint();
gameStatus.setText(gameStatusToPrint);
mHandler.postDelayed(mStatusChecker, mHandlerInterval);
}
};
}

public void startRepeatingTask() {
mStatusChecker.run();
}

关于android - recyclerview 定期 ui 子更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30402790/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com