刷新和加载更多

来源:互联网 发布:js怎么获取数据库数据 编辑:程序博客网 时间:2024/05/16 06:59

/**

*这个只是本人做的一个简单的刷新加载如果想看更多信息请点击下方链接进入

*http://www.jianshu.com/p/e2e142a07c2a

*/


//首先我们先在build.gradle导入包(本人用的是recyclerview,也可以使用listview或者是gridview)


compile 'com.cjj.materialrefeshlayout:library:1.3.0'compile 'com.android.support:recyclerview-v7:25.3.0'

//接下来我们就在main.xml中设置

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.bwei.myhome.MainActivity">    <com.cjj.MaterialRefreshLayout        android:id="@+id/refresh"        android:layout_width="match_parent"        android:layout_height="wrap_content"        app:overlay="true"        app:wave_show="true"        app:wave_color="@color/material_green"        app:wave_height_type="higher">        <android.support.v7.widget.RecyclerView            android:id="@+id/rv"            android:layout_width="match_parent"            android:layout_height="match_parent">        </android.support.v7.widget.RecyclerView>    </com.cjj.MaterialRefreshLayout></LinearLayout>

//效果图




//接下来就要开始写代码了

private MaterialRefreshLayout refreshLayout;private RecyclerView rv;private List<String> list;private MyAdapter myAdapter;private boolean isLoadMore = true;/** * 一个承接数据的数组 */private List<String> mList = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    initView();    initData();}private void initData() {    list = new ArrayList<>();    for (int i=0;i<10;i++){        list.add(""+i);    }    rv.setLayoutManager(new LinearLayoutManager(this));    myAdapter = new MyAdapter(MainActivity.this,list);    rv.setAdapter(myAdapter);    refreshLayout.setLoadMore(true);    refreshLayout.setMaterialRefreshListener(new MaterialRefreshListener() {        //刷新        @Override        public void onRefresh(MaterialRefreshLayout materialRefreshLayout) {            //一般加载数据都是在子线程中,这里我用到了handler            new Handler().postDelayed(new Runnable() {                @Override                public void run() {                    Toast.makeText(MainActivity.this, "已经没有更多数据了", Toast.LENGTH_SHORT).show();                    /**                     * 刷新完成后调用此方法,要不然刷新效果不消失                     */                    refreshLayout.finishRefresh();                }            }, 3000);        }        //加载更多        @Override        public void onRefreshLoadMore(MaterialRefreshLayout materialRefreshLayout) {            new Handler().postDelayed(new Runnable() {                @Override                public void run() {                    isLoadMore=false;                    for (int i = 0; i < 3; i++) {                        mList.add(i, "new City " + i);                    }                    //通知刷新                    myAdapter.addLists(myAdapter.getLists().size(), mList);                    //mRecyclerView.scrollToPosition(mAdapter.getLists().size());                    /**                     * 完成加载数据后,调用此方法,要不然刷新的效果不会消失                     */                    refreshLayout.finishRefreshLoadMore();                }            }, 3000);        }    });}private void initView() {    refreshLayout = (MaterialRefreshLayout) findViewById(R.id.refresh);    rv = (RecyclerView) findViewById(R.id.rv);}

//下面是MyAdapter中的代码


private Context context;private List<String> list;public interface OnItemClickLitener{    void onItemClick(View view, int position);    void onItemLongClick(View view , int position);}private OnItemClickLitener mOnItemClickLitener;public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener){    this.mOnItemClickLitener = mOnItemClickLitener;}public MyAdapter(Context context, List<String> list) {    this.context = context;    this.list = list;}@Overridepublic MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {    MyViewHolder holder = new MyViewHolder(LayoutInflater.from(            context).inflate(R.layout.item, viewGroup,            false));    return holder;}@Overridepublic void onBindViewHolder(final MyAdapter.MyViewHolder holder, int i) {    holder.tv.setText("item"+list.get(i));    // 如果设置了回调,则设置点击事件    if (mOnItemClickLitener != null)    {        holder.itemView.setOnClickListener(new View.OnClickListener()        {            @Override            public void onClick(View v)            {                int pos = holder.getLayoutPosition();                mOnItemClickLitener.onItemClick(holder.itemView, pos);            }        });        holder.itemView.setOnLongClickListener(new View.OnLongClickListener()        {            @Override            public boolean onLongClick(View v)            {                int pos = holder.getLayoutPosition();                mOnItemClickLitener.onItemLongClick(holder.itemView, pos);                return false;            }        });    }}@Overridepublic int getItemCount() {    return list.size();}class MyViewHolder extends RecyclerView.ViewHolder{    private TextView tv;    public MyViewHolder(View view)    {        super(view);        tv = (TextView) view.findViewById(R.id.tv);    }}/** * 对以下方法的复用 * @param lists */public void addLists(List<String> lists) {    addLists(0, lists);}/** * 添加数据 * @param position  添加的位置 * @param lists   添加的数据 */public void addLists(int position, List<String> lists) {    //mLists = lists;    if (lists != null && lists.size() > 0) {        list.addAll(lists);        /**         * Notify any registered observers that the <code>itemCount</code> items starting at         * position <code>positionStart</code> have changed.         *         * 通知item是从哪个地方到哪个地方已经改变了         */        notifyItemRangeChanged(position, lists.size());    }}/** * mLists集合的get方法  通过他可以取得数据的size(); * @return */public List<String> getLists() {    return list;}

//下面是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">    <TextView        android:gravity="center"        android:textSize="20sp"        android:textColor="#000000"        android:text="0000"        android:id="@+id/tv"        android:layout_width="match_parent"        android:layout_height="wrap_content" /></LinearLayout>


//最终效果图







/**

*自我感觉还是挺好用的,如果出现什么问题,可以在下方评论

*来看博客的兄弟姐妹们给个赞

*/





















0 0
原创粉丝点击