gpt4 book ai didi

java - 如何更新 recyclerview 中的相对时间?

转载 作者:搜寻专家 更新时间:2023-11-01 07:41:55 25 4
gpt4 key购买 nike

我有一个 RecyclerView,它显示带有标题、文本和上次编辑时间的项目。 enter image description here

在 RecyclerView 适配器的 onBindViewHolder 中,我使用 getRelativeTimeSpanString 并将笔记对象的时间与当前时间进行比较:

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Note note = getItem(position);
holder.title.setText(note.getTitle());
holder.text.setText(note.getText());

String s = DateUtils.getRelativeTimeSpanString(note.getTime(),
System.currentTimeMillis(), 0L, DateUtils.FORMAT_ABBREV_ALL).toString();
holder.timestamp.setText(s);
}

如果我刚刚添加了该项目,它会显示“0 秒前”。我如何随着时间的推移更新它?

在写这个问题的时候,SO提出了这个问题:Updating the relative time in android ,但是我不认为每 X 秒更新一次 RecyclerView 是最好的主意:

  1. 它会耗尽电池电量
  2. 它更新不需要更新的项目(例如,上次更新是 6 小时前,但正在更新 holder.timestamp每 X 秒)

有没有更有效的方法来完成这个?

最佳答案

鉴于您只需要在用户界面可见时更新用户界面,您可以通过使用 onResume()onPause 仅在知道用户界面位于前台时更新用户界面来减少电池消耗() fragment/Acitvity 中的生命周期回调。此外,如果分钟粒度对您的用例来说足够好,您可以使用 ACTION_TIME_TICK 系统广播,它每分钟触发一次,因此您无需创建自己的计时器。

首先,在onResume()中注册一个BroadcastReceiver来监听这个广播,在onPause()中注销:

@Override
public void onResume() {
final IntentFilter filter = new IntentFilter(Intent.ACTION_TIME_TICK);
getContext().registerReceiver(receiver, filter);
}

@Override
public void onPause() {
getContext().unregisterReceiver(receiver);
}

receiver 中,包含更新您的 RecyclerView 相关项的逻辑(或者将其委托(delegate)给您的 Adapter,作为一个粗略的例子:

final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
adapter.updateTimes();
}
}

//Inside your Adapter...
void updateTimes() {
for(int i = 0; i < notes.size(); i++) {
final Note note = notes.get(i);
//Pseudocode for determening whether or not an update it necessary
//Actual implementation will depend on how you handle updates
final String relative = getCurrentRelativeTimeString();
if(!Objects.equals(relative, note.getRelativeTimeString())) {
note.setRelativeTimeString(relative);
notifyItemChanged(i);
}
}
}

关于java - 如何更新 recyclerview 中的相对时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55440864/

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