99import android .view .ViewGroup ;
1010
1111import androidx .annotation .NonNull ;
12+ import androidx .recyclerview .widget .DiffUtil ;
1213import androidx .recyclerview .widget .LinearLayoutManager ;
14+ import androidx .recyclerview .widget .ListAdapter ;
1315import androidx .recyclerview .widget .RecyclerView ;
1416
1517import com .d4rk .androidtutorials .java .R ;
1820import com .d4rk .androidtutorials .java .utils .EdgeToEdgeDelegate ;
1921import com .google .android .material .textview .MaterialTextView ;
2022
21- import java .util .ArrayList ;
2223import java .util .List ;
2324import java .util .concurrent .ExecutorService ;
2425import java .util .concurrent .Executors ;
@@ -74,7 +75,7 @@ private void loadNotes() {
7475 if (!executor .isShutdown ()) {
7576 executor .execute (() -> {
7677 List <Note > notes = db .noteDao ().getAll ();
77- runOnUiThread (() -> adapter .setNotes (notes ));
78+ runOnUiThread (() -> adapter .submitList (notes ));
7879 });
7980 }
8081 }
@@ -86,14 +87,24 @@ protected void onDestroy() {
8687 handler .removeCallbacksAndMessages (null );
8788 }
8889
89- private static class NotesAdapter extends RecyclerView .Adapter <NotesAdapter .NoteViewHolder > {
90- private List <Note > notes = new ArrayList <>();
91-
92- void setNotes (List <Note > notes ) {
93- this .notes = notes ;
94- notifyDataSetChanged ();
90+ private static class NotesAdapter extends ListAdapter <Note , NotesAdapter .NoteViewHolder > {
91+ NotesAdapter () {
92+ super (DIFF_CALLBACK );
9593 }
9694
95+ private static final DiffUtil .ItemCallback <Note > DIFF_CALLBACK =
96+ new DiffUtil .ItemCallback <Note >() {
97+ @ Override
98+ public boolean areItemsTheSame (@ NonNull Note oldItem , @ NonNull Note newItem ) {
99+ return oldItem .id == newItem .id ;
100+ }
101+
102+ @ Override
103+ public boolean areContentsTheSame (@ NonNull Note oldItem , @ NonNull Note newItem ) {
104+ return oldItem .text .equals (newItem .text );
105+ }
106+ };
107+
97108 @ NonNull
98109 @ Override
99110 public NoteViewHolder onCreateViewHolder (@ NonNull ViewGroup parent , int viewType ) {
@@ -104,12 +115,7 @@ public NoteViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType
104115
105116 @ Override
106117 public void onBindViewHolder (@ NonNull NoteViewHolder holder , int position ) {
107- holder .textView .setText (notes .get (position ).getText ());
108- }
109-
110- @ Override
111- public int getItemCount () {
112- return notes .size ();
118+ holder .textView .setText (getItem (position ).getText ());
113119 }
114120
115121 static class NoteViewHolder extends RecyclerView .ViewHolder {
0 commit comments