|
7 | 7 | import android.support.annotation.NonNull;
|
8 | 8 | import android.support.annotation.Nullable;
|
9 | 9 | import android.support.v7.app.AppCompatActivity;
|
10 |
| -import android.support.v7.recyclerview.extensions.DiffCallback; |
| 10 | +import android.support.v7.util.DiffUtil; |
11 | 11 | import android.support.v7.widget.LinearLayoutManager;
|
12 | 12 | import android.support.v7.widget.RecyclerView;
|
13 | 13 | import android.util.Log;
|
|
20 | 20 | import android.widget.TextView;
|
21 | 21 | import android.widget.Toast;
|
22 | 22 |
|
23 |
| -import com.firebase.ui.firestore.FirestoreInfiniteScrollListener; |
24 |
| -import com.firebase.ui.firestore.FirestorePagingAdapter; |
25 |
| -import com.firebase.ui.firestore.FirestorePagingOptions; |
26 | 23 | import com.firebase.ui.firestore.paging.FirestorePagedList;
|
27 | 24 | import com.firebase.uidemo.R;
|
28 | 25 | import com.google.android.gms.tasks.OnCompleteListener;
|
@@ -59,90 +56,39 @@ protected void onCreate(Bundle savedInstanceState) {
|
59 | 56 | mFirestore = FirebaseFirestore.getInstance();
|
60 | 57 | mProgressBar.setIndeterminate(true);
|
61 | 58 |
|
62 |
| - // TODO |
63 |
| -// setUpAdapter(); |
64 |
| - setUpAdapter_Alternate(); |
| 59 | + setUpAdapter(); |
65 | 60 | }
|
66 | 61 |
|
67 | 62 | private void setUpAdapter() {
|
68 | 63 | Query baseQuery = mFirestore.collection("items")
|
69 | 64 | .orderBy("value", Query.Direction.ASCENDING);
|
70 | 65 |
|
71 |
| - // Paging options: |
72 |
| - // * pageSize - number of items to load in each 'page'. |
73 |
| - // * loadTriggerDistance - how far from the bottom/top of the data set to trigger a load. |
74 |
| - // * maxPages - maximum number of pages to keep in memory at a time. |
75 |
| - FirestorePagingOptions<Item> options = new FirestorePagingOptions.Builder<Item>() |
76 |
| - .setQuery(baseQuery, Item.class) |
77 |
| - .setPageSize(20) |
78 |
| - .setLoadTriggerDistance(10) |
79 |
| - .setMaxPages(5) |
80 |
| - .build(); |
81 |
| - |
82 |
| - FirestorePagingAdapter<Item, ItemViewHolder> adapter = |
83 |
| - new FirestorePagingAdapter<Item, ItemViewHolder>(options) { |
84 |
| - @Override |
85 |
| - public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { |
86 |
| - View view = LayoutInflater.from(parent.getContext()) |
87 |
| - .inflate(R.layout.item_item, parent, false); |
88 |
| - |
89 |
| - return new ItemViewHolder(view); |
90 |
| - } |
91 |
| - |
92 |
| - @Override |
93 |
| - protected void onBindViewHolder(ItemViewHolder holder, int position, Item model) { |
94 |
| - holder.bind(model); |
95 |
| - } |
96 |
| - |
97 |
| - @Override |
98 |
| - protected void onLoadingStateChanged(boolean isLoading) { |
99 |
| - super.onLoadingStateChanged(isLoading); |
100 |
| - if (isLoading) { |
101 |
| - mProgressBar.setVisibility(View.VISIBLE); |
102 |
| - } else { |
103 |
| - mProgressBar.setVisibility(View.INVISIBLE); |
104 |
| - } |
105 |
| - } |
106 |
| - }; |
107 |
| - |
108 |
| - LinearLayoutManager manager = new LinearLayoutManager(this); |
109 |
| - |
110 |
| - // The infinite scroll listener will instruct the adapter to page up and down at the |
111 |
| - // appropriate times. |
112 |
| - FirestoreInfiniteScrollListener listener = |
113 |
| - new FirestoreInfiniteScrollListener(manager, adapter); |
114 |
| - |
115 |
| - mRecycler.setLayoutManager(manager); |
116 |
| - mRecycler.setAdapter(adapter); |
117 |
| - mRecycler.addOnScrollListener(listener); |
118 |
| - } |
119 |
| - |
120 |
| - private void setUpAdapter_Alternate() { |
121 |
| - DiffCallback<DocumentSnapshot> diffCallback = FirestorePagedList.getDiffer(); |
122 |
| - |
| 66 | + DiffUtil.ItemCallback<DocumentSnapshot> diffCallback = FirestorePagedList.getDiffCallback(); |
123 | 67 | final PagedListAdapter<DocumentSnapshot, ItemViewHolder> adapter = new PagedListAdapter<DocumentSnapshot, ItemViewHolder>(diffCallback) {
|
124 | 68 | @Override
|
125 |
| - public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { |
| 69 | + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { |
126 | 70 | View view = LayoutInflater.from(parent.getContext())
|
127 | 71 | .inflate(R.layout.item_item, parent, false);
|
128 | 72 |
|
129 | 73 | return new ItemViewHolder(view);
|
130 | 74 | }
|
131 | 75 |
|
132 | 76 | @Override
|
133 |
| - public void onBindViewHolder(ItemViewHolder holder, int position) { |
| 77 | + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { |
134 | 78 | DocumentSnapshot snapshot = getItem(position);
|
135 | 79 | Item model = snapshot.toObject(Item.class);
|
136 | 80 |
|
137 | 81 | holder.bind(model);
|
138 | 82 | }
|
139 | 83 | };
|
140 | 84 |
|
141 |
| - FirestorePagedList.getLiveData().observe(this, |
| 85 | + // TODO: Expose loading state in the adapter |
| 86 | + |
| 87 | + FirestorePagedList.getLiveData(baseQuery).observe(this, |
142 | 88 | new Observer<PagedList<DocumentSnapshot>>() {
|
143 | 89 | @Override
|
144 | 90 | public void onChanged(@Nullable PagedList<DocumentSnapshot> snapshots) {
|
145 |
| - adapter.setList(snapshots); |
| 91 | + adapter.submitList(snapshots); |
146 | 92 | }
|
147 | 93 | });
|
148 | 94 |
|
|
0 commit comments