安卓RecyclerView万能适配器之baserecyclerviewadapterhelper详解

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: [email protected]
 */

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: [email protected]
 */

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




 
 
 
 
 
 
 

猜你喜欢

转载自blog.csdn.net/Allan_Bst/article/details/72797681