WSから取得したゲームの期間のタイムスタンプを(とりわけ)含むアイテムのrecyclerViewがあります。試合の期間を表示するには、現在のタイムスタンプを取得し、マットを作成して、読み取り可能な形式に変換する必要があります(例:5分5秒)。一部のビューのみを更新する必要があります。
各チャイルドビューは、xxx秒ごとに更新する必要があります。
私の最初のアプローチは、更新が必要なビューにバインドされたオブジェクトのリストを作成することでした。私のフラグメントでは、ハンドラーを宣言し、リスト内のすべてのオブジェクトに対してnotifyItemChanged(position)を呼び出します。ハンドラーがnotifyItemChangedを呼び出すたびに、ビュー全体が再レンダリングされ、小さな点滅効果があります。私はそれを起こしたくないので、私の2番目のアプローチは、更新が必要なすべての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();
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加