Android Studio 的gradle中添加如下依赖,SwipeRefreshLayout在 support V4 包下,RecyclerView在V7包下,由于V7包内包涵了V4,所以就不需要添加V4的依赖了。

  compile 'com.android.support:appcompat-v7:23.0.0'  compile 'com.android.support:recyclerview-v7:23.0.0'

实现继承自RecyclerView.Adapter<>的适配器, 实现上拉加载功能,在RecyclerView的底部添加一个footer,(根据ViewType的类型判断是添加Item还是Footer),需要重写的三个方法:

①onCreateViewHolder()
这个方法主要为每个Item inflater出一个View,但是该方法返回的是一个ViewHolder。该方法把View直接封装在ViewHolder中,然后我们面向的是ViewHolder这个实例,当然这个ViewHolder需要我们自己去编写。直接省去了当初的convertView.setTag(holder)和convertView.getTag()这些繁琐的步骤。

②onBindViewHolder()
这个方法主要用于适配渲染数据到View中。方法提供给你了一个viewHolder,而不是原来的convertView。

③getItemCount()
这个方法就类似于BaseAdapter的getCount方法了,即总共有多少个条目。

public class MyAdapter  extends RecyclerView.Adapter {    public enum LoadStatus{        CLICK_LOAD_MORE,//上拉加载更多        LOADING_MORE//正在加载更多    }    private LoadStatus mLoadStatus = LoadStatus.CLICK_LOAD_MORE;//上拉加载的状态    private static final int VIEW_TYPE_FOOTER = 0;    private static final int VIEW_TYPE_ITEM = 1;    private List mList;    private Context mContext;    public MyAdapter(Context context, List list) {        mContext = context;        mList = list;    }    @Override    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        if (viewType == VIEW_TYPE_FOOTER) {            return onCreateFooterViewHolder(parent, viewType);        } else if (viewType == VIEW_TYPE_ITEM) {            return onCreateItemViewHolder(parent, viewType);        }        return null;    }    @Override    public void onBindViewHolder(ViewHolder holder, int position) {        switch (getItemViewType(position)) {            case VIEW_TYPE_ITEM:                onBindItemViewHolder(holder, position);                break;            case VIEW_TYPE_FOOTER:                onBindFooterViewHolder(holder, position, mLoadStatus);                break;            default:                break;        }    }    public RecyclerView.ViewHolder onCreateFooterViewHolder(ViewGroup parent, int viewType) {        View view = LayoutInflater.from(mContext).inflate(R.layout.footer_layout,parent,false);        return new FooterViewHolder(view);    }    public RecyclerView.ViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {        View view =LayoutInflater.from(mContext).inflate(R.layout.item_layout,parent,false);        return new ItemViewHolder(view);    }    public void onBindFooterViewHolder(RecyclerView.ViewHolder holder, int poition, LoadStatus loadStatus) {        FooterViewHolder viewHolder = (FooterViewHolder) holder;        switch (loadStatus) {            case CLICK_LOAD_MORE:                viewHolder.mLoadingLayout.setVisibility(View.GONE);viewHolder.mClickLoad.setVisibility(View.VISIBLE); break;            case LOADING_MORE:                viewHolder.mLoadingLayout.setVisibility(View.VISIBLE);viewHolder.mClickLoad.setVisibility(View.GONE); break;        }    }    public void onBindItemViewHolder(RecyclerView.ViewHolder holder, int position) {        ItemViewHolder viewHolder = (ItemViewHolder) holder;        viewHolder.mTextView.setText(getItem(position));    }    @Override    public int getItemCount() {        return mList.size() + 1;    }   public  void refresh(){       notifyDataSetChanged();   }    public String getItem(int position) {        return mList.get(position);    }    public void addAll(List list) {        this.mList.addAll(list);        notifyDataSetChanged();    }    @Override    public int getItemViewType(int position) {        if (position + 1 == getItemCount()) {//最后一条为FooterView            return VIEW_TYPE_FOOTER;        }        return VIEW_TYPE_ITEM;    }    public void reSetData(List list) {        this.mList = list;        notifyDataSetChanged();    }    public void setLoadStatus(LoadStatus loadStatus) {        this.mLoadStatus = loadStatus;    }}  class FooterViewHolder extends  RecyclerView.ViewHolder{        public LinearLayout mLoadingLayout;        public TextView mClickLoad;        public FooterViewHolder(View itemView) {            super(itemView);            mLoadingLayout=(LinearLayout) itemView.findViewById(R.id.loading);            mClickLoad=(TextView) itemView.findViewById(R.id.click_load_txt);/* mClickLoad.setOnClickListener(new View.OnClickListener() {//添加点击加载更多监听                @Override                public void onClick(View view) {                    loadMore();                }            });*/        }    }  class ItemViewHolder extends  RecyclerView.ViewHolder{          public TextView mTextView;          public ItemViewHolder(View itemView) {              super(itemView);              mTextView = (TextView) itemView.findViewById(R.id.textView);          }      }

footer的layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="40dp"    android:gravity="center_horizontal"    android:orientation="horizontal">    <LinearLayout        android:id="@+id/loading"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:gravity="center"        android:orientation="horizontal">        <ProgressBar            android:layout_width="wrap_content"            android:layout_height="match_parent"/>        <TextView            android:layout_width="wrap_content"            android:layout_height="match_parent"            android:gravity="center_vertical"            android:text="正在加载..."/>    LinearLayout>    <TextView        android:id="@+id/click_load_txt"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:gravity="center"        android:paddingTop="5dp"        android:paddingBottom="5dp"        android:text="点击加载更多"        android:visibility="gone"/>RelativeLayout>

Item的layout

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"><TextView    android:gravity="center"    android:id="@+id/textView"    android:layout_width="match_parent"    android:layout_height="wrap_content"    />LinearLayout>

activity_main

<?xml version="1.0" encoding="utf-8"?>"http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.yzppp.recycle.MainActivity">    .support.v4.widget.SwipeRefreshLayout        android:id="@+id/swipeRefreshLayout"        android:layout_width="match_parent"        android:layout_height="match_parent">        .support.v7.widget.RecyclerView            android:id="@+id/recyclerView"            android:layout_width="match_parent"            android:layout_height="match_parent">        .support.v7.widget.RecyclerView>    .support.v4.widget.SwipeRefreshLayout>

MainActivity的实现,下拉刷新通过SwipeRefreshLayout.OnRefreshListener()
接口来实现。

public class MainActivity extends Activity {private RecyclerView mRecyclerView;private  SwipeRefreshLayout mSwipeRefreshLayout;private MyAdapter mAdapter;    private int mLastVisibleItemPosition=0;    private LinearLayoutManager mLayoutManager;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mRecyclerView= (RecyclerView) findViewById(R.id.recyclerView);        mSwipeRefreshLayout= (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);        mLayoutManager=new LinearLayoutManager(this);        mRecyclerView.setLayoutManager(mLayoutManager);        mRecyclerView.setItemAnimator(new DefaultItemAnimator());        mAdapter=new MyAdapter(this,getData("init"));        mRecyclerView.setAdapter(mAdapter);        mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener(){                         @Override                         public void onRefresh() {                        new Thread(){                          @Override                          public void run() {                              try{                                Thread.sleep(3000);                                final List list=getData("refresh");                                runOnUiThread(new Runnable() {                                    @Override                                    public void run() {                                        mAdapter.reSetData(list);                                        mSwipeRefreshLayout.setRefreshing(false);                                    }                                });                              }                              catch (InterruptedException e){                                  e.printStackTrace();                              }                          }                      }.start();                      }             });        mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener(){            @Override//滚动状态变化时回调            public void onScrollStateChanged(RecyclerView recyclerView, int newState)    {                super.onScrollStateChanged(recyclerView, newState);               // mLastVisibleItemPosition=mLayoutManager.findLastVisibleItemPosition();                //滑动停止并且底部不可滚动(即滑动到底部) 加载更多                if(newState==RecyclerView.SCROLL_STATE_IDLE&&!(ViewCompat.canScrollVertically(recyclerView,1))                       ){                         loadMore();                }            }            @Override//滚动时回调            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {                super.onScrolled(recyclerView, dx, dy);            }        });   }    public void loadMore(){        mAdapter.setLoadStatus(MyAdapter.LoadStatus.LOADING_MORE);        mAdapter.refresh();        new Thread(){            @Override            public void run() {                try{                    Thread.sleep(3000);                    final List list=getData("load more");                    runOnUiThread(new Runnable() {                        @Override                        public void run() {                            mAdapter.addAll(list);                            mAdapter.setLoadStatus(MyAdapter.LoadStatus.CLICK_LOAD_MORE);                        }                    });                }catch (InterruptedException e){                  e.printStackTrace();                };            }        }.start();    }    public  List getData(String flag){        int idx=1;        if(mAdapter!=null){            idx=mAdapter.getItemCount();        }        List list=new ArrayList<>(10);        for (int i=0;i<10;i++){            list.add(flag+":"+(idx+i));        }        return list;    }}

更多相关文章

  1. Android SmartRefreshLayout下拉刷新上拉加载动画不动解决
  2. android 连接服务器的方法及安全性问题
  3. android中Bitmap的放大和缩小的方法
  4. Android遍历文件Listfile返回值为null问题解决方法适用Android8.
  5. Android 最新获取手机内置存储大小,SD卡存储空间大小方法
  6. Android 启动浏览器的方法
  7. Android根据电量变化为不同图片的方法【电池电量提示】
  8. Android之日期时间选择器使用方法
  9. Android 图片旋转(使用Matrix.setRotate方法)

随机推荐

  1. 横竖屏切换【Android】
  2. Android 安全
  3. android EditText的自动换行和对Enter键
  4. Android简易音乐播放器之播放列表实现(第
  5. Android进阶笔记10:Android(安卓)万能适配
  6. 昨日看了一本书《Android技术内幕.系统卷
  7. Android(安卓)退出Activity
  8. Android画板
  9. 【更新】Google 与微软开始口水战
  10. 十分钟让你了解Android触摸事件原理(Input