recycler+swipe实现上拉和下拉

  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     }
View Code

 

posted @ 2016-05-12 09:45  蒋蝈蝈  阅读(151)  评论(0编辑  收藏  举报