文章主要做个人学习记录使用。
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.网络原因
简单使用
布局引用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.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