一、引入及设置
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
最后是交流公众号,大家可以关注一下
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/119169.html