感觉RecycleView可以完全取代ListView,所以ListView的用法我就忽略了。。。。。
首先使用RecycleView需要一个适配器RecycleView.Adapter<>
适配器就是将数据源和RecycleView连接起来的工具。
我们只需将数据源传递给适配器,再将适配器传递给RecycleView即可。
所以我们要先定制自己的RecycleView.Viewholeder和RecycleView.Adapter,继承这两个类即可
代码如下:
class data
{
//数据
String text;
int image;
}
public class MyAdapter extends RecyclerView.Adapter<WebAdapter.ViewHolder> {
static class ViewHolder extends RecyclerView.ViewHolder
{
//定义包含的控件
ImageView imageView;
TextView textView;
//构造函数通过view.findViewById(id)找到控件
ViewHolder(View view)
{
super(view);
imageView=(ImageView)view.findViewById(R.id.image);
textView=(TextView)view.findViewById(R.id.text);
}
}
private List<data> ld;
WebAdapter(List<data> ld)
{
this.ld=ld;
}
//下面是需要重载的函数
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//加载布局
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout...,false);
final ViewHolder vh=new ViewHolder(view);
//单独给每个控件添加监听器
vh.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Do something
}
});
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
//给ViewHolder绑定数据
Data dt=ld.get(position);
holder.textView.setText(dt.text);
holder.imageView.setImageResource(dt.image);
}
@Override
public int getItemCount() {
return ld.size();
}
}
然后直接定义一个MyAdapter()传入数据源。
定义一个LayoutManager,可选择以下布局
- LinearLayoutManager(Context context, int orientation, boolean reverseLayout)
- StaggeredGridLayoutManager(int spanCount, int orientation) //传入行数和方向
- GridLayoutManager(Context context, int spanCount, int orientation,
boolean reverseLayout) //传入行数和方向
最后定义RecycleView
用下面两个函数传入Adapter和LayoutManager
.setLayoutManager()
.setAdapter()