2016-05-29 3 views
0

私はRecyclerviewを使ってメモ帳アプリを実装しています。Android - なぜ私たちはadapter.notifydatasetChanged()メソッドを使用していますか?

メモを追加、削除、編集するときにUIで表示するように変更されたnewListnoteを返し、adapter.NotifyDataSetChanged()を呼び出します。

public static void UpdateUI(List<Entity_NoteItem> newlistNote) { 
    /*listNoteToDisplayOnUI = newListNote(); 
    adapter.notifyDataSetChanged();*/ 

    adapter = new DisplayUI_CustomIconLabelAdapter(adapter.context, newlistNote); 
    myRecyclerView.setAdapter(adapter); 
} 

しかし、私は私は別のメモリアドレスを持つ別のオブジェクトによってアダプターのデータとして設定されているlistNoteを割り当てた場合、方法NotifyDataSetChanged()は影響を及ぼさないであろうことに気づきました。 したがって、私は新しいリストノートで新しいアダプタを決定し、myRecyclerView.setAdapter(アダプタ)を呼び出し、より効果的になりました。

私の質問は次のとおりです:なぜ私たちはAdapter.NotifyDataSetChanged()メソッドを使用しなければならないのですか?

ありがとうございました!

+0

何度も何度もsetAdapterを行うことは効率的ではありません。アダプター自体はデータを管理する傾向があります。 notifyDataSetChangedはUIを最適に更新します。 – jaibatrik

+0

あなたのお返事ありがとう – Duy

答えて

3

私たちはAdapter.NotifyDataSetChanged()メソッドを使用しなければならないのですが、変更されたデータとsetAdapterをもう一度使用することはできますか?

setAdapter(...)を呼び出すと、すべての行がゼロから作成されます。 BuはnotifyDataSetChanged()を使用すると、古い行を再利用することができます。したがって、パフォーマンスが必要な場合はnotifyDataSetChanged()を使用してください。

もRecyclerView.Adapterはあまりにもこれらのメソッドがあります。

notifyItemChanged(int) 
notifyItemInserted(int) 
notifyItemRemoved(int) 
notifyItemRangeChanged(int, int) 
notifyItemRangeInserted(int, int) 
notifyItemRangeRemoved(int, int) 
+0

素晴らしい答え、ありがとう – Duy

関連する問題