Android RecyclerView的ByRecyclerView框架详解与使用

导读:本篇文章讲解 Android RecyclerView的ByRecyclerView框架详解与使用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、引入及设置

1.先在项目 build.gradle 的 repositories 添加

allprojects {
    repositories {
        ......
        maven { url "https://jitpack.io" }
    }
}

2.然后module的build中在dependencies添加

dependencies {
    ......
    //集成
    implementation 'com.github.youlookwhat:ByRecyclerView:1.1.6'
    implementation "com.github.youlookwhat:ByRecyclerView:1.0.18-support" // support版本已不再支持
}

3.极速设置

<me.jingbin.library.ByRecyclerView
    android:id="@+id/byRecycleView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

二、Item ChildItem的点击事件与长按事件

1.xml 与bean

1).activity_main

<?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">

    <me.jingbin.library.ByRecyclerView
        android:id="@+id/byRecycleView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

2).item_recycleview

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="46dp"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/tvName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginStart="10dp"
            android:textColor="#000000"
            android:textSize="18sp"
            tools:text="姓名" />

        <TextView
            android:id="@+id/tvContent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginStart="10dp"
            android:layout_toStartOf="@+id/itenClick"
            android:layout_toEndOf="@+id/tvName"
            android:textColor="#006600"
            android:maxLines="1"
            android:ellipsize="end"
            android:textSize="18sp"
            tools:text="描述" />

        <TextView
            android:id="@+id/itenClick"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:layout_marginStart="10dp"
            android:layout_marginEnd="10dp"
            android:text="ChildItemClick"
            android:textColor="@android:color/holo_red_dark"
            android:textSize="18sp" />

    </RelativeLayout>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#000000" />

</LinearLayout>

3).DataItemBean

public class DataItemBean {

    String name;
    String remark;

    public DataItemBean() {
        super();
    }

    public DataItemBean(String name, String remark) {
        this.name = name;
        this.remark = remark;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    @Override
    public String toString() {
        return "DataItemBean{" +
                "name='" + name + '\'' +
                ", remark='" + remark + '\'' +
                '}';
    }
}

2.创建adapter

public class ItemClickAdapter extends BaseRecyclerAdapter<DataItemBean> {

    public ItemClickAdapter(List<DataItemBean> data) {
        super(R.layout.item_recycleview, data);
    }

    @Override
    protected void bindView(BaseByViewHolder<DataItemBean> holder, DataItemBean bean, int position) {
        holder.setText(R.id.tvName, bean.getName());
        holder.setText(R.id.tvContent, bean.getRemark());
        holder.setText(R.id.itenClick, (position + 1) + "、ChildItemClick");
        holder.addOnClickListener(R.id.itenClick); //为Child item 添加点击事件
        holder.addOnLongClickListener(R.id.itenClick);//为Child item 添加长按事件
    }
}

3.activity

import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.zdmtech.csndbyrecycleviewframe.adapter.ItemClickAdapter;

import java.util.ArrayList;
import java.util.List;

import me.jingbin.library.ByRecyclerView;

public class ItemClickActivity extends AppCompatActivity {

    private Context context;
    private ByRecyclerView byRecyclerView;
    private TextView tvBack, tvTitle;
    private ItemClickAdapter itemClickAdapter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = this;
        initView();
        dataItemList();
        initData();

    }

    public void initData() {
        LinearLayoutManager layoutManager = new LinearLayoutManager(context);
        layoutManager.setOrientation(RecyclerView.VERTICAL);
        byRecyclerView.setLayoutManager(layoutManager);
        itemClickAdapter = new ItemClickAdapter(dataList);
        byRecyclerView.setAdapter(itemClickAdapter);

        //item 点击事件
        byRecyclerView.setOnItemClickListener(new ByRecyclerView.OnItemClickListener() {
            @Override
            public void onClick(View v, int position) {
                DataItemBean dataItemBean = dataList.get(position);
                show(dataItemBean.getRemark());
            }
        });

        //item 长按事件
        byRecyclerView.setOnItemLongClickListener(new ByRecyclerView.OnItemLongClickListener() {
            @Override
            public boolean onLongClick(View v, int position) {
                DataItemBean dataItemBean = dataList.get(position);
                show(dataItemBean.getRemark());
                return true;
            }
        });

        //childItem 点击事件
        byRecyclerView.setOnItemChildClickListener(new ByRecyclerView.OnItemChildClickListener() {
            @Override
            public void onItemChildClick(View view, int position) {
                DataItemBean dataItemBean = dataList.get(position);
                show(dataItemBean.getRemark()+"childItem");
            }
        });
        //childItem 长按事件
        byRecyclerView.setOnItemChildLongClickListener(new ByRecyclerView.OnItemChildLongClickListener() {
            @Override
            public boolean onItemChildLongClick(View view, int position) {
                DataItemBean dataItemBean = dataList.get(position);
                show(dataItemBean.getRemark()+"childItem Long");
                return true;
            }
        });

    }

    public void initView() {
        byRecyclerView = findViewById(R.id.byRecycleView);
        tvBack = findViewById(R.id.tvBack);
        tvTitle = findViewById(R.id.tvTitle);

        tvBack.setVisibility(View.INVISIBLE);
        tvTitle.setText("item childItem 点击/长按");
    }

    /**
     * 添加测试数据
     */
    private List<DataItemBean> dataList;

    public void dataItemList() {
        dataList = new ArrayList<DataItemBean>();
        DataItemBean dataItemBean = new DataItemBean();
        dataItemBean.setName("张三");
        dataItemBean.setRemark("努力工作,踏实实干");
        dataList.add(dataItemBean);

        dataItemBean = new DataItemBean();
        dataItemBean.setName("狄仁杰");
        dataItemBean.setRemark("唐朝公认的神断");
        dataList.add(dataItemBean);

        dataItemBean = new DataItemBean();
        dataItemBean.setName("鸣人");
        dataItemBean.setRemark("从弱小到强大,心态、努力都很重要");
        dataList.add(dataItemBean);

        dataItemBean = new DataItemBean();
        dataItemBean.setName("佐助");
        dataItemBean.setRemark("火影中天才人物,别人做不到的他能轻易做到,但是天才的背后还是努力与汗水");
        dataList.add(dataItemBean);

        dataItemBean = new DataItemBean();
        dataItemBean.setName("唐三");
        dataItemBean.setRemark("逆袭成功,成就神一般的人物");
        dataList.add(dataItemBean);
    }

    public void show(String str) {
        Toast.makeText(context, "" + str, Toast.LENGTH_SHORT).show();
    }

}

三、下拉刷新与加载更多
1.activity_refresh_zidingyi
<me.jingbin.library.ByRecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="vertical" />

2.adapter

public class RefreshAdapter extends BaseRecyclerAdapter<DataItemBean> {

    public RefreshAdapter(List<DataItemBean> datas) {
        super(R.layout.item_refresh, datas);
    }

    @Override
    protected void bindView(BaseByViewHolder<DataItemBean> holder, DataItemBean bean, int position) {
        holder.setText(R.id.tvStr, bean.getName() + "-" + position);
    }
}

3.DataUtil

/**
 * 生成数据工具类
 */
public class DataUtil {

    /**
     * 一般item的数据
     */
    public static ArrayList<DataItemBean> get(Context context, int num) {
        ArrayList<DataItemBean> list = new ArrayList<>();
        for (int i = 0; i < num; i++) {
            DataItemBean bean = new DataItemBean();
            bean.setName("数据展示");
            list.add(bean);
        }
        return list;
    }

    /**
     * 下一页数据 默认page至少 = 1
     */
    public static ArrayList<DataItemBean> getMore(Context context, int num, int page) {
        ArrayList<DataItemBean> list = new ArrayList<>();
        for (int i = num * (page - 1); i < num * (page); i++) {
            DataItemBean bean = new DataItemBean();
            bean.setName("数据展示");
            list.add(bean);
        }
        return list;
    }

}

(一)、自带刷新

activity:

public class RefreshActivity extends AppCompatActivity {

    private Context context;
    private TextView tvBack, tvTitle;
    private ByRecyclerView byRecyclerView;
    private RefreshAdapter refreshAdapter;
    private int page = 1;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_refresh_zidingyi);
        context = this;
        initView();
        initData();
    }

    public void initData() {
        LinearLayoutManager layoutManager = new LinearLayoutManager(context);
        layoutManager.setOrientation(RecyclerView.VERTICAL);
        byRecyclerView.setLayoutManager(layoutManager);
        // 加了分割线,滚动条才会置顶
        byRecyclerView.addItemDecoration(new SpacesItemDecoration(context, SpacesItemDecoration.VERTICAL));
        refreshAdapter = new RefreshAdapter(DataUtil.get(context, 10));
        byRecyclerView.setAdapter(refreshAdapter);

        /**
         * 下拉刷新
         * */
        byRecyclerView.setOnRefreshListener(new ByRecyclerView.OnRefreshListener() {
            @Override
            public void onRefresh() {
                page = 1;
                refreshAdapter.setNewData(DataUtil.getMore(context, 10, 1));
            }
        }, 500);

        /**
         * 上拉 加载更多
         * */
        byRecyclerView.setOnLoadMoreListener(new ByRecyclerView.OnLoadMoreListener() {
            @Override
            public void onLoadMore() {
                byRecyclerView.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if (page == 3) {
                            byRecyclerView.loadMoreEnd();
                            return;
                        }
                        if (page == 1) {
                            page++;
                            byRecyclerView.loadMoreFail();
                            return;
                        }
                        page++;
                        refreshAdapter.addData(DataUtil.getMore(context, 6, 1)); //加载添加6条数据
                        byRecyclerView.loadMoreComplete();
                    }
                } ,1000);
            }
        });


    }

    public void initView() {
        tvBack = findViewById(R.id.tvBack);
        tvTitle = findViewById(R.id.tvTitle);
        //toolBar
        tvBack.setVisibility(View.VISIBLE);
        tvTitle.setText("使用自带刷新");
        tvBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        byRecyclerView = findViewById(R.id.recyclerView);
    }

}

(二)、使用SwipeRefreshLayout

1.xml

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
    android:id="@+id/swipeRefreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <me.jingbin.library.ByRecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical" />

</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

2.activity

public class SwipeRefreshActivity extends AppCompatActivity {

    private Context context;
    private TextView tvBack, tvTitle;
    private ByRecyclerView byRecyclerView;
    private SwipeRefreshLayout swipeRefreshLayout;
    private RefreshAdapter refreshAdapter;
    private int page = 1;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_swiperefreshlayout);
        context = this;
        initView();
        initData();

    }

    public void initData() {
        LinearLayoutManager layoutManager = new LinearLayoutManager(context);
        layoutManager.setOrientation(RecyclerView.VERTICAL);
        byRecyclerView.setLayoutManager(layoutManager);
        // 加了分割线,滚动条才会置顶
        byRecyclerView.addItemDecoration(new SpacesItemDecoration(context, SpacesItemDecoration.VERTICAL));
        refreshAdapter = new RefreshAdapter(DataUtil.get(context, 10));
        byRecyclerView.setAdapter(refreshAdapter);

        //swipeRefreshLayout 下拉刷新
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                if (!byRecyclerView.isLoadingMore()) {
                    byRecyclerView.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            swipeRefreshLayout.setRefreshing(false);
                            page = 1;
                            refreshAdapter.setNewData(DataUtil.getMore(context, 10, page));
                        }
                    }, 500);
                } else {
                    swipeRefreshLayout.setRefreshing(false);
                }
            }
        });

        /**
         * 上拉 加载更多
         * */
        byRecyclerView.setOnLoadMoreListener(new ByRecyclerView.OnLoadMoreListener() {
            @Override
            public void onLoadMore() {
                byRecyclerView.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if (page == 3) {
                            byRecyclerView.loadMoreEnd();
                            return;
                        }
                        if (page == 1) {
                            page++;
                            byRecyclerView.loadMoreFail();
                            return;
                        }
                        page++;
                        refreshAdapter.addData(DataUtil.getMore(context, 6, 1)); //加载添加6条数据
                        byRecyclerView.loadMoreComplete();
                    }
                }, 1000);
            }
        });

    }

    public void initView() {
        tvBack = findViewById(R.id.tvBack);
        tvTitle = findViewById(R.id.tvTitle);
        //toolBar
        tvBack.setVisibility(View.VISIBLE);
        tvTitle.setText("使用SwipeRefreshLayout");
        tvBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        byRecyclerView = findViewById(R.id.recyclerView);
        swipeRefreshLayout = findViewById(R.id.swipeRefreshLayout);
    }
}

(三)、横向加载更多布局

1、xml

<me.jingbin.library.ByRecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="vertical"
    android:orientation="horizontal"/>

2.activity

public class CustomHorizontalLayoutActivity extends AppCompatActivity {

    private Context context;
    private TextView tvBack, tvTitle;
    private ByRecyclerView byRecyclerView;
    private RefreshAdapter refreshAdapter;
    private int page = 1;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_refresh_horizontal);
        context = this;
        initView();
        initData();
    }

    public void initData() {
        LinearLayoutManager layoutManager = new LinearLayoutManager(context);
        layoutManager.setOrientation(RecyclerView.HORIZONTAL);
        byRecyclerView.setLayoutManager(layoutManager);
        // 加了分割线,滚动条才会置顶
        byRecyclerView.addItemDecoration(new SpacesItemDecoration(context, SpacesItemDecoration.VERTICAL));
        refreshAdapter = new RefreshAdapter(DataUtil.get(context, 5));
        byRecyclerView.setAdapter(refreshAdapter);

        /**
         * 上拉 加载更多
         * */
        byRecyclerView.setOnLoadMoreListener(new ByRecyclerView.OnLoadMoreListener() {
            @Override
            public void onLoadMore() {
                byRecyclerView.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if (page == 3) {
                            byRecyclerView.loadMoreEnd();
                            return;
                        }
                        if (page == 1) {
                            page++;
                            byRecyclerView.loadMoreFail();
                            return;
                        }
                        page++;
                        refreshAdapter.addData(DataUtil.getMore(context, 6, 1)); //加载添加6条数据
                        byRecyclerView.loadMoreComplete();
                    }
                }, 1000);
            }
        });

    }

    public void initView() {
        tvBack = findViewById(R.id.tvBack);
        tvTitle = findViewById(R.id.tvTitle);
        //toolBar
        tvBack.setVisibility(View.VISIBLE);
        tvTitle.setText("使用自带刷新");
        tvBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        byRecyclerView = findViewById(R.id.recyclerView);
    }

}

这些都是基础用法,如果需要可以在此基础上优化

框架地址:https://github.com/youlookwhat/ByRecyclerView/wiki

demo下载地址:https://download.csdn.net/download/yyxhzdm/19151934

最后是交流公众号,大家可以关注一下

Android RecyclerView的ByRecyclerView框架详解与使用

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/119169.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!