android SwipeRefreshLayout 实现 下拉刷新 上拉加载

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 15:07   25   0

上图


没有什么注释 没有demo 但是 思路清晰 好好理解看一下

xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <android.support.v4.widget.SwipeRefreshLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:id="@+id/swipe_refresh_widget"
  6. android:layout_width="match_parent"
  7. android:layout_height="match_parent"
  8. tools:context="com.jsu.whr.recyclerview.Main3Activity">
  9. <android.support.v7.widget.RecyclerView
  10. android:id="@+id/recycle_view"
  11. android:layout_width="match_parent"
  12. android:layout_height="wrap_content">
  13. </android.support.v7.widget.RecyclerView>
  14. </android.support.v4.widget.SwipeRefreshLayout>

主activity

  1. package com.jsu.whr.recyclerview;
  2. import android.os.Handler;
  3. import android.support.v4.widget.SwipeRefreshLayout;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.os.Bundle;
  6. import android.support.v7.widget.LinearLayoutManager;
  7. import android.support.v7.widget.RecyclerView;
  8. import com.jsu.whr.myapplication.R;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. public class Main3Activity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {
  12. SwipeRefreshLayout mSwipeRefreshLayout;
  13. RecyclerView mRecyclerView;
  14. MyAdapter adapter;
  15. List<String> list = new ArrayList<String>();
  16. LinearLayoutManager mLayoutManager;
  17. @Override
  18. protected void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.activity_main3);
  21. mSwipeRefreshLayout = (SwipeRefreshLayout) this.findViewById(R.id.swipe_refresh_widget);
  22. mSwipeRefreshLayout.setColorSchemeResources(
  23. R.color.black,
  24. R.color.read,
  25. R.color.green,
  26. R.color.blue);
  27. mSwipeRefreshLayout.setOnRefreshListener(this);//下拉监听
  28. mRecyclerView = (RecyclerView) this.findViewById(R.id.recycle_view);
  29. mLayoutManager = new LinearLayoutManager(this);
  30. mRecyclerView.setLayoutManager(mLayoutManager);
  31. mRecyclerView.setOnScrollListener(mOnScrollListener);
  32. adapter = new MyAdapter(this);
  33. mRecyclerView.setAdapter(adapter);
  34. }
  35. private RecyclerView.OnScrollListener mOnScrollListener = new RecyclerView.OnScrollListener() {
  36. private int lastVisibleItem;//窗体可见最后一个item
  37. @Override
  38. public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
  39. super.onScrollStateChanged(recyclerView, newState);
  40. if (newState == RecyclerView.SCROLL_STATE_IDLE//滑动状态 SCROLL_STATE_IDLE表示停止
  41. && lastVisibleItem + 1 == adapter.getItemCount()
  42. && adapter.isShowFooter()) {//条件表示 滑到最底端了
  43. //加载更多
  44. handler.postDelayed(new Runnable() {
  45. @Override
  46. public void run() {
  47. list.addAll(loadNewData());
  48. adapter.notifyDataSetChanged();
  49. }
  50. },1000);
  51. }
  52. }
  53. @Override
  54. public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
  55. super.onScrolled(recyclerView, dx, dy);
  56. lastVisibleItem = mLayoutManager.findLastVisibleItemPosition();
  57. }
  58. };
  59. @Override
  60. public void onRefresh() {
  61. handler.postDelayed(new Runnable() {
  62. @Override
  63. public void run() {
  64. if(list!=null){
  65. list.clear();
  66. }
  67. list.addAll(loadData());
  68. adapter.setDatalist(list);
  69. mSwipeRefreshLayout.setRefreshing(false);
  70. }
  71. },4000);
  72. }
  73. public List<String> loadData(){
  74. List<String> listdata = new ArrayList<String>();
  75. for(int i=0;i<20;i++){
  76. list.add("---->"+i);
  77. }
  78. return listdata;
  79. }
  80. public List<String> loadNewData(){
  81. List<String> listdata = new ArrayList<String>();
  82. for(int i=0;i<20;i++){
  83. list.add("---xin->"+i);
  84. }
  85. return listdata;
  86. }
  87. Handler handler = new Handler(){
  88. };
  89. }
adapter
  1. package com.jsu.whr.recyclerview;
  2. import android.content.Context;
  3. import android.support.v7.widget.RecyclerView;
  4. import android.util.Log;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.TextView;
  9. import com.jsu.whr.myapplication.R;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. /**
  13. * Created by k90 on 2016-09-02.
  14. */
  15. public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
  16. ItemViewHolder mItemViewHolder;
  17. List<String>Datalist = new ArrayList<String>();
  18. Context context;
  19. private boolean mShowFooter = true;
  20. private static final int TYPE_ITEM = 0;
  21. private static final int TYPE_FOOTER = 1;
  22. public void setDatalist(List<String> datalist) {
  23. Datalist = datalist;
  24. this.notifyDataSetChanged();
  25. }
  26. public MyAdapter(Context context) {
  27. this.context = context;
  28. }
  29. @Override
  30. public int getItemViewType(int position) {
  31. // 最后一个item设置为footerView
  32. if(!mShowFooter) {
  33. return TYPE_ITEM;
  34. }
  35. if (position + 1 == getItemCount()) {
  36. return TYPE_FOOTER;
  37. } else {
  38. return TYPE_ITEM;
  39. }
  40. }
  41. public boolean isShowFooter() {
  42. return this.mShowFooter;
  43. }
  44. @Override
  45. public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
  46. if(viewType == TYPE_ITEM) {
  47. View view = LayoutInflater.from(context).inflate(R.layout.items, viewGroup, false);
  48. mItemViewHolder = new ItemViewHolder(view);
  49. return mItemViewHolder;
  50. }
  51. else{
  52. View view = LayoutInflater.from(viewGroup.getContext()).inflate(
  53. R.layout.footer, null);
  54. view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
  55. ViewGroup.LayoutParams.WRAP_CONTENT));
  56. return new FooterViewHolder(view);
  57. }
  58. }
  59. @Override
  60. public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {
  61. if(viewHolder instanceof ItemViewHolder) {
  62. String s = Datalist.get(i);
  63. if (s == null) {
  64. return;
  65. }
  66. ((ItemViewHolder) viewHolder).tv.setText(s);
  67. }
  68. }
  69. @Override
  70. public int getItemCount() {
  71. return Datalist.size();
  72. }
  73. public class FooterViewHolder extends RecyclerView.ViewHolder {
  74. public FooterViewHolder(View view) {
  75. super(view);
  76. }
  77. }
  78. public void isShowFooter(boolean showFooter) {
  79. this.mShowFooter = showFooter;
  80. }
  81. class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
  82. TextView tv;
  83. public ItemViewHolder(View itemView) {
  84. super(itemView);
  85. tv = (TextView) itemView.findViewById(R.id.tv);
  86. tv.setOnClickListener(this);
  87. }
  88. @Override
  89. public void onClick(View v) {
  90. if(mOnItemClickListtenet!=null){
  91. mOnItemClickListtenet.onItemClick(v,this.getPosition());
  92. }
  93. }
  94. }
  95. OnItemClickListtenet mOnItemClickListtenet;
  96. public interface OnItemClickListtenet{
  97. void onItemClick(View v ,int position);
  98. }
  99. public void setmOnItemClickListtenet(OnItemClickListtenet mOnItemClickListtenet) {
  100. this.mOnItemClickListtenet = mOnItemClickListtenet;
  101. }
  102. }

底部layout
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:id="@+id/load_layout"
  5. android:layout_width="match_parent"
  6. android:layout_height="wrap_content"
  7. android:gravity="center"
  8. android:orientation="horizontal"
  9. android:paddingBottom="12dip"
  10. android:paddingTop="12dip" >
  11. <ProgressBar
  12. style="?android:attr/progressBarStyleSmall"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content" />
  15. <TextView
  16. android:id="@+id/more_data_msg"
  17. android:layout_width="wrap_content"
  18. android:layout_height="wrap_content"
  19. android:textSize="16sp"
  20. android:layout_marginLeft="10dp"
  21. android:text="正在加载..." />
  22. </LinearLayout>
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP