2015-09-24 24 views
5

notifyItemRangeChangedに関するRecyclerView#Adapterの問題が発生しています。 Adapterがの最後の呼び出しからgetItemCountの呼び出しを受け取り、次にAdapter#notifyItemRangeChanged(0, 1)を呼び出すと、Adapterは呼び出しを無視します(たとえば、新しい項目が挿入されることはありません)。RecyclerView notifyItemRangeChangedは新しいデータを表示しません

これは予期された動作ですか?

答えて

13

これは予期された動作ですか?

短い答え:はい。

notifyDataSetChanged()上のドキュメントから(はい、別の方法で、私は知っているが、それはアイテムの違いは構造変化変更について説明しますので、ちょうどここでそれを参照する):異なる二つがあります

をデータ変更イベントのクラス、アイテムの変更、および構造の変更。アイテムの変更は、1つのアイテムのデータが更新されても、位置の変更が発生していない場合に発生します。構造的変更とは、アイテムがデータセット内で挿入、削除、または移動される場合です。

は今(私の強調)notifyItemRangeChanged()上のドキュメントを読んを持っている:

これは、アイテム変更イベントではなく、構造的な変化イベントです。これは、指定された位置範囲のデータの反映が期限切れであり、更新する必要があることを示します。指定された範囲内の項目は同じIDを保持します。

あなたの質問にお答えください。 構造変更(すなわち、アイテムを追加しています)を作成しているため、ではなく、で適切な呼び出し方法があります。代わりにnotifyItemRangeInserted()(またはその単数の同等物)に電話する必要があります。これは構造変更が行われたことを示しています。

+0

詳細な回答ありがとうございます。私のアダプター構造はサブアダプターで構成されているので残念です。親アダプター全体をリフレッシュする代わりに、サブアダプターが親アダプターに範囲変更を通知してほしいと思っています。しかし、今、私はそれについて考えて、 'notifyItemRangeInserted'を使う代わりに何をしなければならないのでしょうか?親アダプタは新しいデータを知っています... とにかく、私は今や馬鹿げています。再度、感謝します :) – Jin

関連する問題