BaseRecyclerViewAdapterHelper简单使用

文章主要做个人学习记录使用。

RecyclerView的万能适配器

Android的列表,已由以前的listview转换为更实用更灵活的RecyclerView,而BaseRecyclerViewAdapterHelper也比以前的BaseAdapter效率更高,极大程度的减少了代码量。

BaseRecyclerViewAdapterHelper的优点:

  • 代码简洁
  • 子控件、多个子控件的点击事件和长按事件处理更方便
  • 列表加载动画,默认动画一行代码搞定,自定义动画也提供相关接口
  • 添加头布局、尾布局,轻松适应多种复杂列表页面
  • 上拉刷新、下拉加载分分钟搞定
  • 分组布局、多布局,一个适配器也能解决
  • 拖拽、滑动删除Item,超实用
  • 树形列表也可以哦
  • ……

框架引用

eclipse用户请绕行

第一步 在build.gradle(Project:xxxx)的repositories中添加:

allprojects {
repositories {

maven { url “https://jitpack.io” }
}
}

第二步 在build.gradle(moudle:app)的dependencies中添加:

dependencies {
compile ‘com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30’
}

更新说明:https://github.com/CymChad/BaseRecyclerViewAdapterHelper/releases

加载失败原因:

1.配置原因
- 以上两个地方都要配置,请准确找到需要添加的gradle
- 2.1.2版本之前都加v,之后(包含)都不加v
2.网络原因

简单使用

<?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.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipefersh"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>
  • 子布局文件
"><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_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:padding="10dp"
        android:textColor="@android:color/black"
        android:textSize="14sp"/>

    <TextView
        android:id="@+id/tv_desc"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:padding="10dp"
        android:textColor="@android:color/darker_gray"
        android:textSize="12sp"/>
    <!--此处做分割线,RecyclerView有开放的分割线方法-->
    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@android:color/darker_gray"/>
</LinearLayout>
  • 实体类
public class RecyclerEntity {
    private String title;
    private String desc;

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}
  • adapter适配器
public class RecyclerViewAdapter extends BaseQuickAdapter<RecyclerEntity, BaseViewHolder> {

    public RecyclerViewAdapter(@LayoutRes int layoutResId, @Nullable List<RecyclerEntity> data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(final BaseViewHolder helper, RecyclerEntity item) {
        helper.setText(R.id.tv_title, item.getTitle())
                .setText(R.id.tv_desc, item.getDesc())
                .addOnClickListener(R.id.tv_title)
                .addOnClickListener(R.id.tv_desc);
    }
}
  • activity代码(用的是xutils的注解框架 )
public class RecyclerViewActivity extends BaseActivity {

    @ViewInject(R.id.recyclerView)
    RecyclerView recyclerView;
    @ViewInject(R.id.swipefersh)
    SwipeRefreshLayout swipefersh;

    RecyclerViewAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recyclerview);
        ViewUtils.inject(this);

        //创建布局管理
        LinearLayoutManager manager = new LinearLayoutManager(this);
        manager.setOrientation(LinearLayout.VERTICAL);
        recyclerView.setLayoutManager(manager);
        //创建适配器
        adapter = new RecyclerViewAdapter(R.layout.item_recyclerview, initData());
        //设置适配器
        recyclerView.setAdapter(adapter);
        //打开默认动画
        adapter.openLoadAnimation();
        //添加头布局
        adapter.addHeaderView(getLayoutInflater().inflate(R.layout.view_recyclerview_header, null));
        initListener(this);
    }

    //数据处理
    private ArrayList<RecyclerEntity> initData() {
        ArrayList<RecyclerEntity> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            RecyclerEntity entify = new RecyclerEntity();
            entify.setTitle("测试专用标题" + i);
            entify.setDesc("测试专用描述" + i);
            list.add(entify);
        }
        return list;
    }

    //设置监听
    private void initListener(final Context con) {
        adapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
                Toast.makeText(con, "点击了第" + position + "条", Toast.LENGTH_SHORT).show();
            }
        });
        adapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
            @Override
            public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
                if (view.getId() == R.id.tv_title) {
                    Toast.makeText(con, "点击了子布局第" + position + "条title", Toast.LENGTH_SHORT).show();
                } else if (view.getId() == R.id.tv_desc) {
                    Toast.makeText(con, "点击了子布局第" + position + "条desc", Toast.LENGTH_SHORT).show();
                }
            }
        });
        //刷新
        swipefersh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                recyclerView.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        adapter.setNewData(initData());
                        swipefersh.setRefreshing(false);
                    }
                }, 500);
            }
        });
        //加载
        adapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
            @Override
            public void onLoadMoreRequested() {
                //加载时禁止刷新
                swipefersh.setEnabled(false);
                recyclerView.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if (adapter.getData().size() == 20) {//加载一定条数后停止加载
                            adapter.loadMoreEnd();
                            adapter.setEnableLoadMore(true);
                            swipefersh.setEnabled(true);
                            swipefersh.setRefreshing(false);
                        } else {
                            adapter.addData(initData());
                            adapter.loadMoreComplete();
                            swipefersh.setEnabled(true);
                            swipefersh.setRefreshing(false);
                        }
                    }
                }, 1000);
            }
        }, recyclerView);
    }
}

文章参考:

http://www.jianshu.com/p/b343fcff51b0
http://www.jianshu.com/p/1e20f301272e

猜你喜欢

转载自blog.csdn.net/qq_28026283/article/details/78540665
今日推荐