BaseRecyclerViewAdapterHelper的作者很勤快,BaseRecyclerViewAdapterHelper库也很优秀,平常工作中,都是使用BaseRecyclerViewAdapterHelper开发的,用习惯了,有点依赖放不开咯!
3.x版也是更新很长时间,还没来得及体验,其实不是,之前那会升级过一次,很懵逼,不知咋用,和旧版使用有很大区别,后面考虑到项目的原因,同时也没有太多时间去研究,故依然使用2.x版。
最近换工作,有了更多空闲时间,是时候来想学习3.x版使用,这里只是涉及平常使用最多的地方,没有更深入的研究,当然了,后面会继续深入学习。共勉!
目前使用BaseRecyclerViewAdapterHelper最新版是3.0.6版,3.x版后很多写法都发生很大变化。下面我们通过一个简单的例子来学习。
效果图:
代码:
private RecyclerView mJokeRecycler;
private JokeAdapter jokeAdapter;
private Joke mJoke;
private List<Joke> mListJoke;
private List<Joke> mNewListJoke;
protected void initView() {
mJokeRecycler = findViewById(R.id.rv_joke);
mListJoke = new ArrayList<>();
mNewListJoke = new ArrayList<>();
}
protected void initData() {
for (int i = 0; i < 20; i++) {
mJoke = new Joke();
mJoke.setJokeTitle(i+"默认数据");
mListJoke.add(mJoke);
}
setRecyclerView();
}
private void setRecyclerView() {
//new GridLayoutManager(getContext(), 3, GridLayoutManager.VERTICAL, false)
mJokeRecycler.setLayoutManager(new LinearLayoutManager(JokeActivity.this, LinearLayoutManager.VERTICAL, false));
jokeAdapter = new JokeAdapter(R.layout.item_rv_joke, mListJoke);
mJokeRecycler.setAdapter(jokeAdapter);
//mListRecycler.setNestedScrollingEnabled(false);
jokeAdapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
}
});
//3.x版使用
jokeAdapter.getLoadMoreModule().setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore() {
mNewListJoke.clear();//注意清理集合,不然上拉加载的数据会出现重复
request();
}
});
jokeAdapter.getLoadMoreModule().setAutoLoadMore(false);
//当自动加载开启,同时数据不满一屏时,是否继续执行自动加载更多(默认为true)
jokeAdapter.getLoadMoreModule().setEnableLoadMoreIfNotFullPage(false);
//1.上拉加载=2.x版使用
/*jokeAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
@Override
public void onLoadMoreRequested() {
mJokeRecycler.postDelayed(new Runnable() {
@Override
public void run() {
if (mCurrentCounter >= TOTAL_COUNTER) {
//数据全部加载完毕
jokeAdapter.loadMoreEnd();
}else {
if (!isErr) {
isUpdate = true;
//成功获取更多数据
jokeAdapter.addData(getServerDatas());
mCurrentCounter = jokeAdapter.getData().size();
jokeAdapter.loadMoreComplete();
} else {
//获取更多数据失败 PullToRefreshUseActivity
isErr = true;
Toast.makeText(JokeActivity.this, "获取更多数据失败", Toast.LENGTH_LONG).show();
jokeAdapter.loadMoreFail();
}
}
}
}, 2000);
}
}, mJokeRecycler);*/
}
private void request() {
//省略网络请求数据......
//网络请求成功后下拉刷新与上拉加载都做如下处理:
for (int j = 0; j < 10; j++) {
mJoke = new Joke();
mJoke.setJokeTitle(j+"上拉加载更多数据");
mNewListJoke.add(mJoke);
}
// if (isUpdate) {
//不是第一页,则用add
jokeAdapter.addData(mNewListJoke);
// } else {
// //如果是加载的第一页数据,用 setData()
// jokeAdapter.setList(mNewListJoke);
// }
//如何判断已经加载完数据
if (mNewListJoke.size() < PAGE_SIZE) {
//如果不够一页,显示没有更多数据布局
jokeAdapter.getLoadMoreModule().loadMoreEnd();
} else {
jokeAdapter.getLoadMoreModule().loadMoreComplete();
}
// page加一
//++page;
}
适配器
/**
* Created by Administrator on 2021/5/23.
* @author 小红妹
*/
public class JokeAdapter extends BaseQuickAdapter<Joke, BaseViewHolder> implements LoadMoreModule {
//这里需要注意一下,2.x版是有@Nullable,3.x版需要去掉,不然,首次默认加载的数据会出现重复
/*public JokeAdapter(int layoutResId, @Nullable List<Joke> data) {
super(layoutResId, data);
}*/
public JokeAdapter(int layoutResId, List<Joke> data) {
super(layoutResId, data);
}
@Override
protected void convert(BaseViewHolder helper, Joke item) {
//加载网络图片 mURL
helper.setText(R.id.tv_joke_item_title, item.getJokeTitle())
.setText(R.id.tv_joke_item_time,item.getJokeTime()+"");
// if (item.getClassificationName().length() > 5) {
// helper.setText(R.id.tv_list_name, item.getClassificationName().substring(0,5)+"...");
// } else {
// helper.setText(R.id.tv_list_name, item.getClassificationName());
// }
}
}