Skip to content

Commit e54e881

Browse files
author
Kaushik Gopal
committed
ref: move pagination adapter to independent class
1 parent eefa39d commit e54e881

File tree

2 files changed

+103
-90
lines changed

2 files changed

+103
-90
lines changed
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package com.morihacky.android.rxjava.pagination;
2+
3+
import android.support.v7.widget.RecyclerView;
4+
import android.view.LayoutInflater;
5+
import android.view.View;
6+
import android.view.ViewGroup;
7+
import android.widget.Button;
8+
import android.widget.TextView;
9+
10+
import com.morihacky.android.rxjava.R;
11+
import com.morihacky.android.rxjava.rxbus.RxBus;
12+
13+
import java.util.ArrayList;
14+
import java.util.List;
15+
16+
class PaginationAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
17+
18+
private static final int ITEM_LOG = 0;
19+
private static final int ITEM_BTN = 1;
20+
21+
private final List<String> _items = new ArrayList<>();
22+
private final RxBus _bus;
23+
24+
PaginationAdapter(RxBus bus) {
25+
_bus = bus;
26+
}
27+
28+
void addItems(List<String> items) {
29+
_items.addAll(items);
30+
}
31+
32+
@Override
33+
public int getItemViewType(int position) {
34+
if (position == _items.size()) {
35+
return ITEM_BTN;
36+
}
37+
38+
return ITEM_LOG;
39+
}
40+
41+
@Override
42+
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
43+
switch (viewType) {
44+
case ITEM_BTN:
45+
return ItemBtnViewHolder.create(parent);
46+
default:
47+
return ItemLogViewHolder.create(parent);
48+
}
49+
}
50+
51+
@Override
52+
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
53+
switch (getItemViewType(position)) {
54+
case ITEM_LOG:
55+
((ItemLogViewHolder) holder).bindContent(_items.get(position));
56+
return;
57+
case ITEM_BTN:
58+
((ItemBtnViewHolder) holder).bindContent(_bus);
59+
}
60+
}
61+
62+
@Override
63+
public int getItemCount() {
64+
return _items.size() + 1; // add 1 for paging button
65+
}
66+
67+
private static class ItemLogViewHolder extends RecyclerView.ViewHolder {
68+
ItemLogViewHolder(View itemView) {
69+
super(itemView);
70+
}
71+
72+
static ItemLogViewHolder create(ViewGroup parent) {
73+
return new ItemLogViewHolder(LayoutInflater.from(parent.getContext())
74+
.inflate(R.layout.item_log, parent, false));
75+
}
76+
77+
void bindContent(String content) {
78+
((TextView) itemView).setText(content);
79+
}
80+
}
81+
82+
static class ItemBtnViewHolder extends RecyclerView.ViewHolder {
83+
ItemBtnViewHolder(View itemView) {
84+
super(itemView);
85+
}
86+
87+
static ItemBtnViewHolder create(ViewGroup parent) {
88+
return new ItemBtnViewHolder(LayoutInflater.from(parent.getContext())
89+
.inflate(R.layout.item_btn, parent, false));
90+
}
91+
92+
void bindContent(RxBus bus) {
93+
((Button) itemView).setText(R.string.btn_demo_pagination_more);
94+
itemView.setOnClickListener(v -> bus.send(new ItemBtnViewHolder.PageEvent()));
95+
}
96+
97+
static class PageEvent {
98+
}
99+
}
100+
}

app/src/main/java/com/morihacky/android/rxjava/pagination/PaginationFragment.java

Lines changed: 3 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@
77
import android.view.LayoutInflater;
88
import android.view.View;
99
import android.view.ViewGroup;
10-
import android.widget.Button;
1110
import android.widget.ProgressBar;
12-
import android.widget.TextView;
1311

1412
import com.morihacky.android.rxjava.MainActivity;
1513
import com.morihacky.android.rxjava.R;
@@ -34,7 +32,7 @@ public class PaginationFragment extends BaseFragment {
3432
@Bind(R.id.progress_paging) ProgressBar _progressBar;
3533

3634
private CompositeSubscription _subscriptions;
37-
private TestAdapter _adapter;
35+
private PaginationAdapter _adapter;
3836
private RxBus _bus;
3937
private PublishSubject<Integer> _paginator;
4038

@@ -48,7 +46,7 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
4846
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
4947
_pagingList.setLayoutManager(layoutManager);
5048

51-
_adapter = new TestAdapter(_bus);
49+
_adapter = new PaginationAdapter(_bus);
5250
_pagingList.setAdapter(_adapter);
5351

5452
_paginator = PublishSubject.create();
@@ -77,7 +75,7 @@ public void onStart() {
7775
// I'm using an Rxbus purely to hear from a nested button click
7876
// we don't really need Rx for this part. it's just easy ¯\_(ツ)_/¯
7977
Subscription s1 = _bus.asObservable().subscribe(event -> {
80-
if (event instanceof ItemBtnViewHolder.PageEvent) {
78+
if (event instanceof PaginationAdapter.ItemBtnViewHolder.PageEvent) {
8179

8280
// trigger the paginator for the next event
8381
int nextPage = _adapter.getItemCount() - 1;
@@ -127,89 +125,4 @@ public View onCreateView(LayoutInflater inflater,
127125
}
128126

129127

130-
private static class TestAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
131-
132-
static final int ITEM_LOG = 0;
133-
static final int ITEM_BTN = 1;
134-
135-
final List<String> _items = new ArrayList<>();
136-
final RxBus _bus;
137-
138-
TestAdapter(RxBus bus) {
139-
_bus = bus;
140-
}
141-
142-
void addItems(List<String> items) {
143-
_items.addAll(items);
144-
}
145-
146-
@Override
147-
public int getItemViewType(int position) {
148-
if (position == _items.size()) {
149-
return ITEM_BTN;
150-
}
151-
152-
return ITEM_LOG;
153-
}
154-
155-
@Override
156-
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
157-
switch (viewType) {
158-
case ITEM_BTN:
159-
return ItemBtnViewHolder.create(parent);
160-
default:
161-
return ItemLogViewHolder.create(parent);
162-
}
163-
}
164-
165-
@Override
166-
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
167-
switch (getItemViewType(position)) {
168-
case ITEM_LOG:
169-
((ItemLogViewHolder) holder).bindContent(_items.get(position));
170-
return;
171-
case ITEM_BTN:
172-
((ItemBtnViewHolder) holder).bindContent(_bus);
173-
}
174-
}
175-
176-
@Override
177-
public int getItemCount() {
178-
return _items.size() + 1; // add 1 for paging button
179-
}
180-
}
181-
182-
private static class ItemLogViewHolder extends RecyclerView.ViewHolder {
183-
ItemLogViewHolder(View itemView) {
184-
super(itemView);
185-
}
186-
187-
static ItemLogViewHolder create(ViewGroup parent) {
188-
return new ItemLogViewHolder(LayoutInflater.from(parent.getContext())
189-
.inflate(R.layout.item_log, parent, false));
190-
}
191-
192-
void bindContent(String content) {
193-
((TextView) itemView).setText(content);
194-
}
195-
}
196-
197-
private static class ItemBtnViewHolder extends RecyclerView.ViewHolder {
198-
ItemBtnViewHolder(View itemView) {
199-
super(itemView);
200-
}
201-
202-
static ItemBtnViewHolder create(ViewGroup parent) {
203-
return new ItemBtnViewHolder(LayoutInflater.from(parent.getContext())
204-
.inflate(R.layout.item_btn, parent, false));
205-
}
206-
207-
void bindContent(RxBus bus) {
208-
((Button) itemView).setText(R.string.btn_demo_pagination_more);
209-
itemView.setOnClickListener(v -> bus.send(new PageEvent()));
210-
}
211-
212-
static class PageEvent {
213-
}
214-
}
215128
}

0 commit comments

Comments
 (0)