2016-08-10 8 views
1

私はRecyclerViewで40のアイテムを持っているとしましょう。その中の20項目すべてがタッチされたときに起動される同じ意図を保持します。 5秒間隔で意図が変わるので、40個のアイテムのうち20個がインテントを置き換えますRecyclerViewの一部のアイテムを再バインドせずに更新する方法はありますか?

20個のアイテムのそれぞれを再バインドせずに保持するインテントをすべて更新する方法はありますか?

リバインドするたびにアイテムが消えて表示され、5秒の時間間隔で項目が常に表示されたり消えたりすることは視覚的には気になりません。

変数がすべてオブジェクトを指すはずだと思っていたので、そのオブジェクトが更新されると、アイテムの意図も更新されるようになりました。しかし、Javaは価値がないので、そこにチャンスはありません。

アイデア?

答えて

2

ビジュアルが変更されない場合、再バインドする理由はありません。アップデートが必要な項目にデータを渡し、RecyclerView.Adapter#notifyItemChanged()をアダプタに接続しないでください。 RecyclerViewには再バインドが通知されず、基礎となるデータが更新されます。

に変更されますが、点滅したくない場合は、単にアニメーション化されないカスタムItemAnimatorを使用することができます。

もっと簡単な方法は、使用しているItemAnimatorの値を0にしてただちに開始して終了するようにItemAnimator#setChangeDuration()を呼び出すことです。

+0

データが変更されたことをアダプタに通知せずにデータを更新しても、何の効果もありません。アダプターに通知があった場合にのみ、新しい値が古い値に置き換えられます。私の場合、視覚的な変更は必要ありませんが、アダプタに電話するまでデータは更新されませんでした。 'notifyDataSetChanged()' – Kyle

+1

@Kyle。これが起こる理由はたくさんあります。私は、アダプタが 'List'のような何らかの基本的なデータ構造に裏打ちされていると仮定します。 'onBind()'が呼び出されるたびに、 'x 'の位置に項目を渡して' ViewHolder'に渡したと仮定します。アダプタに通知することなく、 'x'の位置でアイテムを更新することができます。両方のオブジェクトには同じアイテムへの参照が含まれているため、 'List'と' ViewHolder'の両方で更新されます。ただし、アイテムをキャッシュまたはコピーしている場合は、2つの参照が作成されます。 – DeeV

+0

あなたはそうです - 私のアダプターはデータ構造で裏付けされています。もしそうでなければ、あなたが言ったことはおそらくうまくいくでしょう。それにもかかわらず、ItemAnimatorを使いこなすことで、私が望んでいたことが分かりました - 優れた提案に感謝します。 – Kyle

関連する問題