作者:刘旭濠
在开发软件学习过程中,在网上查找资料结果发现一个新知识(虽然嘛还没有研究透),不过还是要跟大家分享一下,就是这RecyclerView这个适配器类型控件,这是一个手机安卓5.0后推出的一个强大的适配器类型控件,它与其他不同的是它还需要一个LayoutManager,RecyclerView它共提供了3种布局管理器:LinearLayoutManager线性布局管理器,支持水平和垂直效GridLayoutManager网格布局管理器,支持水平和垂直效果,StaggeredGridLayoutManager分布型管理器,瀑布流效果
对于RecyclerView的使用就是,先引入一个RecyclerView依赖包。(至于这么引用就自己百度吧)接着在xml布局中声明,
接着在设置布局管理器
怎么设置布局管理器管理器呢就像下面的例子一样
mRcv.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
然后接着创建适配器,设置数据源和绑定适配器,至于具体创建适配器如下:
先创建一个类,然后继承RecyclerView.Adapter这个.接着创建一个类ViewHolder,继承RecyclerView。VIewHolder,该类需要创建匹配父类的构造。在重写适配器中的方法:getItemCount():获取数据源的个数(item的数量);onCreateViewHolder():该方法中导入布局,实例化VIewHolder;onBindViewHolder():绑定VIewHolder,加载数据。
注意一下:RecyclerView的LinearLayoutManager不同于一般适配器的布局,RecyclerView的item最外层的布局参数是有效的,比如高度宽度等,所以在使用的时候,第一种是导入View的时候指定没有parent(这里不推荐使用),第二种是在item布局的最外层指定具体的参数。
RecyclerView 为开发者提供了强大的复用能力,比如下面这个(别喷临时弄的样式做出来的样子大概是这种的)
至于怎么做呢,已经有答案了就是下面的(当然还是百度的大神学习过来的,我还没有研究透)
第一步:创建布局,需要导入依赖包:android.support.v7.widget.RecyclerView
activity_main.Xml部分
<android.support.v7.widget.RecyclerView
android:id="@+id/teach_recycler"
android:layout_width=“match_parent”
android:layout_height=“match_parent”/>
item.xml部分
Model.java部分
public class Model
{
private String name;
private int height;
public int getHeight()
{
return height;
}
public void setHeight(int height)
{
this.height = height;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
布局
private void initView()
{
mRecyclerView = (RecyclerView)findViewById(R.id.teach_recycler);
//设置布局管理器
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
// //设置布局的排版方向
mRecyclerView.setLayoutManager(layoutManager);
//绑定适配器
RecyclerAdapter adapter = new RecyclerAdapter(this, getData());
mRecyclerView.setAdapter(adapter);
adapter.setOnItemClickListener(this);//将接口传递到数据产生的地方
}
/**
- 获取数据源
*/
public List getData()
{
List data = new ArrayList<>();
for (int i = 0; i < 30; i++)
{
Model model = new Model();
model.setName("" + i);
model.setHeight(((int)(Math.random() * 100 + 200)));
data.add(model);
}
return data;
}
@Override
public void onItemClick(int position, Model model)
{
Log.e(TAG, "onItemClick: " + position);
}
}