安卓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




 
原创粉丝点击