1 private SwipeRefreshLayout swipe;
2 private RecyclerView recycler;
3 private List<String> list = new ArrayList<>();
4 private MyAdapter adapter;
5 private LinearLayoutManager linearManager;
6 private int lastVisibleItem;
7 private DisplayMetrics displayMetrics;
8
9 @Override
10 protected void create(Bundle savedInstanceState) {
11 setContentView(R.layout.activity_main2);
12
13 swipe = (SwipeRefreshLayout) findViewById(R.id.swipe);
14 recycler = (RecyclerView) findViewById(R.id.recycler);
15
16 displayMetrics = ViewUtils.getDisplayMetrics(this);
17
18 swipe.setColorSchemeResources(R.color.blue_primary, R.color.black_primary,
19 R.color.pink_primary, R.color.red_primary);
20
21 recycler.setHasFixedSize(true);
22 linearManager = new LinearLayoutManager(this);
23 recycler.setLayoutManager(linearManager);
24 recycler.setItemAnimator(new DefaultItemAnimator());
25
26 adapter = new MyAdapter();
27 recycler.setAdapter(adapter);
28
29 setRefreshListener();
30
31 setMoreListener();
32
33 startRefresh();
34 }
35
36 private void startRefresh() {
37 swipe.post(new Runnable() {
38 @Override
39 public void run() {
40 // 开场等待
41 swipe.setRefreshing(true);
42
43 MyApp.pool.execute(new Runnable() {
44 @Override
45 public void run() {
46 try {
47 Thread.sleep(2000);
48 } catch (InterruptedException e) {
49 e.printStackTrace();
50 }
51 for (int i = 0; i < 50; i++) {
52 list.add("startRefresh");
53 }
54 MyApp.handler.post(new Runnable() {
55 @Override
56 public void run() {
57 adapter.notifyDataSetChanged();
58 // 等待结束
59 swipe.setRefreshing(false);
60 }
61 });
62 }
63 });
64 }
65 });
66 }
67
68 private void setRefreshListener() {
69 swipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
70 @Override
71 public void onRefresh() {
72
73 swipe.setRefreshing(true);
74
75 MyApp.pool.execute(new Runnable() {
76 @Override
77 public void run() {
78 try {
79 Thread.sleep(2000);
80 } catch (InterruptedException e) {
81 e.printStackTrace();
82 }
83 for (int i = 0; i < 2; i++) {
84 list.add("Refresh");
85 }
86 MyApp.handler.post(new Runnable() {
87 @Override
88 public void run() {
89 adapter.notifyDataSetChanged();
90 // 等待结束
91 swipe.setRefreshing(false);
92 }
93 });
94 }
95 });
96 }
97 });
98 }
99
100 private void setMoreListener() {
101
102 recycler.addOnScrollListener(new RecyclerView.OnScrollListener() {
103 @Override
104 public void onScrollStateChanged(RecyclerView recyclerView,
105 int newState) {
106 super.onScrollStateChanged(recyclerView, newState);
107 if (newState == RecyclerView.SCROLL_STATE_IDLE &&
108 lastVisibleItem + 1 == adapter.getItemCount()) {
109
110 swipe.setProgressViewEndTarget(true, (int) Math.ceil(displayMetrics.heightPixels / 1.2));
111
112 swipe.setRefreshing(true);
113
114 MyApp.pool.execute(new Runnable() {
115 @Override
116 public void run() {
117 try {
118 Thread.sleep(2000);
119 } catch (InterruptedException e) {
120 e.printStackTrace();
121 }
122 for (int i = 0; i < 2; i++) {
123 list.add("loadMore");
124 }
125 MyApp.handler.post(new Runnable() {
126 @Override
127 public void run() {
128 adapter.notifyDataSetChanged();
129 // 等待结束
130 swipe.setRefreshing(false);
131
132 swipe.setProgressViewEndTarget(true, displayMetrics.heightPixels / 6);
133 }
134 });
135 }
136 });
137 }
138 }
139
140 @Override
141 public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
142 super.onScrolled(recyclerView, dx, dy);
143 // findLastVisibleItemPosition()会提前加载
144 lastVisibleItem = linearManager.findLastCompletelyVisibleItemPosition();
145 }
146 });
147 }
148
149 public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyHolder> {
150
151 @Override
152 public int getItemCount() {
153 return list.size();
154 }
155
156 @Override
157 public MyAdapter.MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
158 return new MyHolder(new TextView(Main2Activity.this));
159 }
160
161 @Override
162 public void onBindViewHolder(MyAdapter.MyHolder holder, int position) {
163 holder.textView.setText(list.get(position) + "--->" + position);
164 }
165
166 public class MyHolder extends RecyclerView.ViewHolder {
167
168 TextView textView;
169
170 public MyHolder(View itemView) {
171 super(itemView);
172 textView = (TextView) itemView;
173 }
174 }
175 }