RecycyleView SwipeRefrshLayout 使用

来源:互联网 发布:网络视频监控系统平台 编辑:程序博客网 时间:2024/06/05 00:21

1.布局文件

<?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"    android:orientation="vertical">    <!--下拉刷新控件-->    <android.support.v4.widget.SwipeRefreshLayout        android:id="@+id/swipe_refresh"        android:layout_width="match_parent"        android:layout_height="match_parent">        <android.support.v7.widget.RecyclerView            android:id="@+id/recyclerview_list"            android:layout_width="match_parent"            android:layout_height="match_parent" />    </android.support.v4.widget.SwipeRefreshLayout></LinearLayout>


2.Adapter 

package com.example.liyn.foryou.recylerview;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.LinearLayout;import android.widget.ProgressBar;import android.widget.TextView;import android.widget.Toast;import com.example.liyn.foryou.R;import java.util.List;import butterknife.BindView;import butterknife.ButterKnife;/** * Recylerview 适配器 * Created by liyn on 2017/3/16. */public class RecylerviewRefreshAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {    Context mContext;    LayoutInflater mInflater;    List<String> mDatas;    private static final int TYPE_ITEM = 0;    private static final int TYPE_FOOTER = 1;    //上拉加载更多    public static final int PULLUP_LOAD_MORE = 0;    //正在加载中    public static final int LOADING_MORE = 1;    //没有加载更多 隐藏    public static final int NO_LOAD_MORE = 2;    //上拉加载更多状态-默认为0    private int mLoadMoreStatus = 0;    public RecylerviewRefreshAdapter(Context context, List<String> datas) {        mContext = context;        mInflater = LayoutInflater.from(context);        mDatas = datas;    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        if (viewType == TYPE_ITEM) {            View itemView = mInflater.inflate(R.layout.recylerview_item, parent, false);            return new ItemViewHolder(itemView);        } else if (viewType == TYPE_FOOTER) {            View itemView = mInflater.inflate(R.layout.load_more, parent, false);            return new FooterViewHolder(itemView);        }        return null;    }    @Override    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {        if (holder instanceof ItemViewHolder) {            ItemViewHolder itemViewHolder = (ItemViewHolder) holder;            String str = mDatas.get(position);            itemViewHolder.mTvContent.setText(str);        } else if (holder instanceof FooterViewHolder) {            FooterViewHolder footerViewHolder = (FooterViewHolder) holder;            switch (mLoadMoreStatus) {                case PULLUP_LOAD_MORE:                    footerViewHolder.mTvLoadText.setText("上拉加载更多...");                    break;                case LOADING_MORE:                    footerViewHolder.mTvLoadText.setText("正加载更多...");                    break;                case NO_LOAD_MORE:                    //隐藏加载更多                    footerViewHolder.mLoadLayout.setVisibility(View.GONE);                    break;            }        }    }    @Override    public int getItemCount() {        //RecyclerView的count设置为数据总条数+ 1(footerView)        return mDatas.size() + 1;    }    @Override    public int getItemViewType(int position) {        if (position + 1 == getItemCount()) {            //最后一个item设置为footerView            return TYPE_FOOTER;        } else {            return TYPE_ITEM;        }    }    public class ItemViewHolder extends RecyclerView.ViewHolder {        @BindView(R.id.tv_text)        TextView mTvContent;        public ItemViewHolder(View itemView) {            super(itemView);            ButterKnife.bind(this, itemView);            initListener(itemView);        }        private void initListener(View itemView) {            itemView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    Toast.makeText(mContext, "poistion " + getAdapterPosition(), Toast.LENGTH_SHORT).show();                }            });        }    }    public class FooterViewHolder extends RecyclerView.ViewHolder {        @BindView(R.id.pbLoad)        ProgressBar mPbLoad;        @BindView(R.id.tvLoadText)        TextView mTvLoadText;        @BindView(R.id.loadLayout)        LinearLayout mLoadLayout;        public FooterViewHolder(View itemView) {            super(itemView);            ButterKnife.bind(this, itemView);        }    }    /**     * 更新加载更多状态     *     * @param status     */    public void changeMoreStatus(int status) {        mLoadMoreStatus = status;        notifyDataSetChanged();    }    //刷新数据    public void refresh(List<String> list) {        mDatas.clear();        mDatas.addAll(list);        notifyDataSetChanged();    }    //加载方法    public void loadmore(List<String> list) {        mDatas.addAll(list);        notifyDataSetChanged();    }}


3.Activity

package com.example.liyn.foryou.recylerview;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.support.annotation.Nullable;import android.support.v4.widget.SwipeRefreshLayout;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import com.example.liyn.foryou.R;import java.util.ArrayList;import java.util.List;import butterknife.BindView;import butterknife.ButterKnife;/** * Recyclerview 可以刷新 加载 使用 * Created by liyn on 2017/3/16. */public class RecyclerviewRefeshActivity extends Activity {    @BindView(R.id.swipe_refresh)    SwipeRefreshLayout swipeRefreshLayout;//刷新控件    @BindView(R.id.recyclerview_list)    RecyclerView recyclerView;//RecyclerView 列表    RecylerviewRefreshAdapter adapter;//适配器    List<String> stringList;//数据    LinearLayoutManager linearLayoutManager;//布局管理器    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_recylerview);        ButterKnife.bind(this);        initRecylerview();        initSwipeRefreshLayout();    }    //初始化Recylerview    void initRecylerview() {        initData();        //设置布局管理器        linearLayoutManager = new LinearLayoutManager(this);        //默认是垂直的        recyclerView.setLayoutManager(linearLayoutManager);        adapter = new RecylerviewRefreshAdapter(this, stringList);        //设置Adapter        recyclerView.setAdapter(adapter);        //RecyclerView滑动监听        recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {            int lastVisibleItem ;            @Override            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {                super.onScrollStateChanged(recyclerView, newState);                //判断RecyclerView的状态 是空闲时,同时,是最后一个可见的ITEM时才加载                if (newState == RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem + 1 == adapter.getItemCount()) {                    //设置正在加载更多                    adapter.changeMoreStatus(adapter.LOADING_MORE);                    new Handler().postDelayed(new Runnable() {                        @Override                        public void run() {                            List<String> newDatas = new ArrayList<>();                            for (int i = 0; i < 5; i++) {                                int index = i + 1;                                newDatas.add("more item" + index);                            }                            adapter.loadmore(newDatas);                            //设置回到上拉加载更多                            adapter.changeMoreStatus(adapter.PULLUP_LOAD_MORE);                        }                    }, 1000);                }            }            @Override            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {                super.onScrolled(recyclerView, dx, dy);                //最后一个可见的ITEM                lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();            }        });    }    //初始化SwipeRefreshLayout    void initSwipeRefreshLayout(){        swipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary);        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {            @Override            public void onRefresh() {                new Handler().postDelayed(new Runnable() {                    @Override                    public void run() {                        List<String> newDatas = new ArrayList<>();                        for (int i = 0; i < 20; i++) {                            int index = i + 1;                            newDatas.add("refresh item" + index);                        }                        adapter.refresh(newDatas);                        swipeRefreshLayout.setRefreshing(false);                    }                }, 1000);            }        });    }    //添加数据    private void initData() {        stringList = new ArrayList<>();        for (int i = 0; i < 40; i++) {            stringList.add("item " + i);        }    }}


4.item 布局文件

(recylerview_item.xml )

<?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="wrap_content"    android:orientation="vertical">    <TextView        android:layout_width="match_parent"        android:id="@+id/tv_text"        android:gravity="center"        android:text="我的世界"        android:layout_height="30dp" /></LinearLayout>

5.加载布局

(load_more.xml)

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/loadLayout"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:gravity="center"    android:orientation="vertical"    android:padding="10dp">    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginBottom="5dip"        android:layout_marginTop="5dip"        android:gravity="center">        <ProgressBar            android:id="@+id/pbLoad"            android:layout_width="20dp"            android:layout_height="20dp"            android:layout_centerVertical="true"            android:indeterminate="false" />        <TextView            android:id="@+id/tvLoadText"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerInParent="true"            android:layout_centerVertical="true"            android:layout_marginLeft="4dip"            android:layout_toRightOf="@id/pbLoad"            android:clickable="true"            android:text="魂牵梦萦 魂牵梦萦 "            android:textColor="#000000"            android:textSize="16sp" />    </RelativeLayout></LinearLayout>








0 0