Skip to content

Commit d6b9d90

Browse files
Merge pull request #102 from MihaiCristianCondrea/codex/refactor-notesadapter-to-use-listadapter
Use ListAdapter and DiffUtil in RoomActivity notes
2 parents 03713cb + e47797c commit d6b9d90

File tree

1 file changed

+20
-14
lines changed
  • app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/data/room

1 file changed

+20
-14
lines changed

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/data/room/RoomActivity.java

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
import android.view.ViewGroup;
1010

1111
import androidx.annotation.NonNull;
12+
import androidx.recyclerview.widget.DiffUtil;
1213
import androidx.recyclerview.widget.LinearLayoutManager;
14+
import androidx.recyclerview.widget.ListAdapter;
1315
import androidx.recyclerview.widget.RecyclerView;
1416

1517
import com.d4rk.androidtutorials.java.R;
@@ -18,7 +20,6 @@
1820
import com.d4rk.androidtutorials.java.utils.EdgeToEdgeDelegate;
1921
import com.google.android.material.textview.MaterialTextView;
2022

21-
import java.util.ArrayList;
2223
import java.util.List;
2324
import java.util.concurrent.ExecutorService;
2425
import 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

Comments
 (0)