移动开发技术2:RecyclerView控件的使用
RecyclerView控件简介
这是一个非常方便且使用广泛的控件,仅使用RecyclerView控件即可完成ListView,GridView,瀑布流三种效果;更重要的是,它支持自定义布局方式。
ListView效果:
GridView和瀑布流的效果还在制作中,待完善
RecyclerView控件使用
对于RecyclerView控件的使用,其实是有套路的。
首先是数据(Data),然后是适配器,接着是对应的控件;
放到本次要首先完成的ListView,实际要做的就是:
创建模拟数据→创建适配器→把数据给适配器→把适配器给控件,让控件去调用。
对于RecyclerView,会多出一个步骤,就是设置布局管理器,这步很重要,如果你忘记了,将不显示内容,即使你适配器有给,你数据有给。
那么问题又来了,为什么要这个布局管理器呢?我的ListView里并没有这个东西呀
这个布局管理器,LayoutManager,说白了就是用来控制布局的,摆成什么样子呢,就由它控制。
比如说你要像ListView成一个列表,那么你给RecyclerView设置一个LinearLayoutManager,它就会像ListView一样显示内容,如果说你想显示成GridView一样,那么来一个GridlLayoutMnager,它就会显示成GrildView一样的效果。
Part1.菜单的创建和设置
效果示意:
这一部分的实现是为了实现切换不同的RecyclerView展示效果(虽然目前暂时只完成了list view的垂直标准展示)
实现起来相对简单,UI方面创建一个menu.xml添加需要的标签(id&title)即可; 逻辑实现上只需要重写onOptionsItemSelected方法,并使用一个switch-case语句处理菜单的点击事件即可。具体可以在代码仓库中看到,这里不做赘述。
Part2.ListView的实现
根据我们上述的思路,我们一步步来实现。
创建模拟数据
首先在Java包下新建两个类,ItemBean用于储存模拟数据(方便起见不使用get/set方法),Datas类用于创建模拟数据集合;然后在main里写一个用于创建模拟数据的initData方法,使用for循环即可创建数据对象。
创建适配器
首先创建一个继承自RecyclerView.Adapter的ListViewAdapter和一个继承自RecyclerView.ViewHolder的InnerHolder
然后是adapter中的几个需要重写的重要方法:
①onCreateViewHolder:用于创建条目View
这个方法呢,是用来创建item的,用一个ViewHolder包装着,已经处理了复用的问题,所以不用像ListView的适配器那样,设置到tag里,自己处理复用。
在这个方法里传进的条目其实就是view的界面,所以它只需要两步:拿到view,创建InnerHolder
②onBindViewHolder:这个方法用于绑定holder,一般用来设置数据
这个方法呢,是用来绑定数据的,这里的holder,就是我们前面创建的那个viewholder。position有了,view也有了,那就可以从数据集合里拿出数据设置到view上了呀。
③getItemCount:用于返回条目个数
获取item 的个数,一般来说,我们返回数据集合的长度,但是也有特殊情况,比如说,你在数据集合的基础上,加了头尾,插入了其他的数据,这样子你的item个数应该是总数才对。
把数据给适配器、把适配器给控件
这里最重要的是记得给出布局管理器,给出下面代码,相信懂得都懂
/**
* 这个方法用于模拟数据
*/
private void initData() {
//创建模拟数据
//创建数据集合
mData = new ArrayList<>();
for (int i = 0; i < Datas.icons.length; i++){
//创建数据对象
ItemBean data = new ItemBean();
data.icon = Datas.icons[i];
data.title = "我是第"+i+"个条目";
//添加到集合中
mData.add(data);
}
//RecyclerView需要设置样式(布局管理器)
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
mList.setLayoutManager(layoutManager);
//创建适配器
ListViewAdapter adapter = new ListViewAdapter(mData);
//设置到recycler view中去
mList.setAdapter(adapter);
}
ListView实现效果展示
可以滑动~
代码仓库
/AndroidProgram1_Wechat.