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 }