安卓RecyclerView万能适配器之baserecyclerviewadapterhelper详解
来源:互联网 发布:软件性能指标描述 编辑:程序博客网 时间:2024/05/29 03:41
1.BaseRecyclerViewAdapterHelper介绍
BaseRecyclerViewAdapterHelper是Github上为实现方便使用RecyclerView而开发的一个框架,使用较为简单方便,
能实现RecyclerView的下拉加载,Item点击事件,Item子控件的点击事件,Item加载动画等等
2.使用详解
先上图:
先放出源码
如何使用它?
先在 build.gradle 的 repositories 添加:
allprojects { repositories { ... maven { url "https://jitpack.io" } } }
然后在dependencies添加:
dependencies { compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:v1.7.9' }
1>item.xml,item的布局很简单,只有一个按钮和一行文字
<?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:id="@+id/tv_item" android:text="test" android:gravity="center" android:textColor="#f00" android:textSize="20sp" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/btn_item" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="item子控件" android:gravity="center"/></LinearLayout>
2>接下来是activity_main.xml,依然很简单,只有一个RecyclerView
<?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.v7.widget.RecyclerView android:id="@+id/rlv" android:layout_width="match_parent" android:layout_height="match_parent"/></LinearLayout>
3>接下来是具体的java代码
/** * Created by allan on 17-5-28. * QQ Num: 1750398075 * CSDN Blog: http://blog.csdn.net/allan_bst * Personal Website: http://mobiledream.top * Personal Sina E-mail: jsp0369@163.com */
public class MainActivity extends AppCompatActivity {
private android.support.v7.widget.RecyclerView rlv;
private boolean isErr = false; //是否加载错误
private int TOTAL_COUNTER = 30; //一共模拟加载30条数据,所有的数据总数
private int mCurrentCounter = 10; //当前的数据总数,因为第一次默认加载10个
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.rlv = (RecyclerView) findViewById(R.id.rlv);
initData(); //初始化数据
}
private void initData() {
ArrayList<String> datas = new ArrayList<>();
for (int i = 0; i < 10; i++) {
datas.add("初始化数据" + i);
}
//创建数据适配器
final MyRecyclerAdapter adapter = new MyRecyclerAdapter(R.layout.item, datas);
rlv.setLayoutManager(new LinearLayoutManager(this));
rlv.setAdapter(adapter);
/* * item的长按和点击事件
* adapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener(){
* @Override public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
* Toast.makeText(MainActivity.this, "onItemClick" + position, Toast.LENGTH_SHORT).show();
* }
* });
*
* adapter.setOnItemLongClickListener(new BaseQuickAdapter.OnItemLongClickListener() {
* @Override public boolean onItemLongClick(BaseQuickAdapter adapter, View view, int position) {
* Toast.makeText(MainActivity.this, "onItemLongClick" + position, Toast.LENGTH_SHORT).show();
* return false;
* }
* });
*
*
* Item子控件的长按和点击事件
* adapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
* @Override public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
* Toast.makeText(MainActivity.this, "onItemChildClick:Botton" + position, Toast.LENGTH_SHORT).show();
* }
* });
*
* adapter.setOnItemChildLongClickListener(new BaseQuickAdapter.OnItemChildLongClickListener() {
* @Override public boolean onItemChildLongClick(BaseQuickAdapter adapter, View view, int position) {
* Toast.makeText(MainActivity.this, "onItemChildLongClick:Botton" + position, Toast.LENGTH_SHORT).show();
* return true; //返回true,否则会触发Item的点击事件
* }
* });
*
*/
//可以看到,在上面的代码中我添加了很多点击事件(item的点击、长按,子控件的点击、长按),上面的写法实在太过繁琐。当然还有更加简单的方式如下
rlv.addOnItemTouchListener(new SimpleClickListener() {
@Override public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
Toast.makeText(MainActivity.this, "点击Item" + Integer.toString(position), Toast.LENGTH_SHORT).show();
}
@Override public void onItemLongClick(BaseQuickAdapter adapter, View view, int position) {
Toast.makeText(MainActivity.this, "长按Item" + Integer.toString(position), Toast.LENGTH_SHORT).show();
}
@Override public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
Toast.makeText(MainActivity.this, "点击Item的Button" + Integer.toString(position), Toast.LENGTH_SHORT).show();
}
@Override public void onItemChildLongClick(BaseQuickAdapter adapter, View view, int position) {
Toast.makeText(MainActivity.this, "长按Item的Button" + Integer.toString(position), Toast.LENGTH_SHORT).show();
}
});
//接下来为满足特别定制,可以给Item添加列表加载动画,默认有五种动画效果(渐显、缩放、从下到上,从左到右、从右到左)
//1.渐变动画效果-------默认显示渐变效果,打开即可
adapter.openLoadAnimation();
//adapter.openLoadAnimation(BaseQuickAdapter.SLIDEIN_LEFT); //修改参数即可
//当然也可以自定义动画,不需要删除即可
adapter.openLoadAnimation(new BaseAnimation(){
@Override public Animator[] getAnimators(View view){
return new Animator[]{
ObjectAnimator.ofFloat(view, "scaleY", 1, 1.1f, 1),
ObjectAnimator.ofFloat(view, "scaleX", 1, 1.1f, 1)
};
}
});
// 默认动画每个item只执行一次,如果想重复执行动画可以调用一下方法
adapter.isFirstOnly(false);
//接下来是刷新加载了
//1.上拉加载
// 滑动最后一个Item的时候回调onLoadMoreRequested方法
adapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener(){
@Override public void onLoadMoreRequested(){
rlv.postDelayed(new Runnable(){
@Override public void run(){
if (mCurrentCounter >= TOTAL_COUNTER){
//判断如果当前Item的数量小于总数量时,即还有数据未加载
//数据全部加载完毕 adapter.loadMoreEnd();
}else{
if (!isErr) { //成功获取更多数据
adapter.addData(getServerDatas());
mCurrentCounter = adapter.getData().size();
adapter.loadMoreComplete();
}else{ //获取更多数据失败
isErr=true;
Toast.makeText(MainActivity.this, "数据获取失败", Toast.LENGTH_LONG).show();
adapter.loadMoreFail();
}
}
}
},800);
}
});
}
//模拟从服务器获取数据
public ArrayList<String> getServerDatas(){
ArrayList<String> newDatas = new ArrayList<String>();
for (int i = 0; i < 10; i++) {
newDatas.add("下拉加载的数据"+i);
}
return newDatas;
}}4>上面代码还是比较简单的,看我的注释就可以看懂,这里不做过多讲解啦接下啦说一下加头布局和脚布局,这是经常要用到的
//添加头布局和脚布局 // 使用代码 添加头部、尾部 adapter.addHeaderView(LinearLayout.inflate(this,R.layout.head_item,null)); // adapter.addFooterView();
一行代码搞定,有没有觉得很简单直接上效果图
5>接下来是适配器了MyRecyclerAdapter.java,这是重头戏
/** * Created by allan on 17-5-28. * QQ Num: 1750398075 * CSDN Blog: http://blog.csdn.net/allan_bst * Personal Website: http://mobiledream.top * Personal Sina E-mail: jsp0369@163.com */public class MyRecyclerAdapter extends BaseQuickAdapter<String,BaseViewHolder> { //必须继承BaseQuickAdapter private ArrayList<String> datas; public MyRecyclerAdapter(int item,ArrayList<String> datas){ //注意构造方法,传递的是item和数据
super(item,datas);
}
@Override protected void convert(BaseViewHolder helper, String item) { //必须重写convert方法,在这里可以直接设置Item的数据和点击事件
helper.setText(R.id.tv_item,item) //设置每个Item的文字
.addOnClickListener(R.id.btn_item) //点击事件
.addOnLongClickListener(R.id.btn_item); //长按事件
}}6>好了,我要讲解的就是这些了,难免有纰漏之处,在这里放出官方网站,具体细节可以结合文档修改
https://github.com/JoanZapata/base-adapter-helper
阅读全文
0 0
- 安卓RecyclerView万能适配器之baserecyclerviewadapterhelper详解
- 万能RecyclerView的数据适配器BaseRecyclerViewAdapterHelper
- 开源框架BaseRecyclerViewAdapterHelper使用——RecyclerView万能适配器
- RecyclerView之BaseRecyclerViewAdapterHelper(一)
- Android开发之实现RecyclerView万能适配器
- 万能RecyclerView适配器
- recyclerView 的万能适配器
- RecyclerView的万能适配器
- 安卓RecyclerView万能分割线
- 为RecyclerView打造万能适配器
- 万能适配器 listview gridview RecyclerView
- 打造RecyclerView的万能适配器
- Android打造万能适配器--RecyclerView
- RecyclerView 万能适配器的抽取
- Databinding打造RecyclerView万能适配器
- RecyclerView分组之BaseRecyclerViewAdapterHelper(实现分组功能)
- ListView之万能适配器
- Android安卓万能适配器adpter和viewholder
- 程序设计你不知道的几个原则
- ListView控件功能全解析
- mybatis入门
- 【Android学习笔记系列】AsyncTask的使用和介绍(获取网络图片与进度条实例)
- Two big numbers to multiply
- 安卓RecyclerView万能适配器之baserecyclerviewadapterhelper详解
- Linux开机启动程序详解
- CodeChef SnakeDown2017 E解题报告
- JAVA代码块非静态代码块与静态代码块构造函数比较
- Effective Objective-C 2.0 总结(四)
- 1066. 图像过滤(15)
- Maven私服nexus添加第三方JAR
- 2.linux内核模块
- ZooKeeper与NanmeNode的HA的一些理解,包括hdfs zkfc -formatZK的作用等。但与DN无关