首先我们知道RecyclerView组件是ListView的升级版,今天先介绍基础的RecyclerView的基本布局RecyclerView.Adapter和LayoutManager
第一:
LayoutManager
我们知道ListView只能在垂直方向上滚动,Android API没有提供ListView在水平方向上面滚动的支持。或许有多种方式实现水平滑动,ListView并不是设计来做这件事情的。但是RecyclerView相较于ListView,在滚动上面的功能扩展了许多。它可以支持多种类型列表的展示要求,主要如下:
LinearLayoutManager ,可以支持水平和竖直方向上滚动的列表。
StaggeredGridLayoutManager ,可以支持交叉网格风格的列表,类似于瀑布流或者Pinterest。
GridLayoutManager ,支持网格展示,可以水平或者竖直滚动,如展示图片的画廊。
因此RecyclerView相对于ListView来说自定义性扩展了很多
第二:
RecyclerView.Adapter和ListView的BaseAdapter不同之处在于:BaseAdapter都是在getView一个方法中实现的,包括View的实例化以及组件的绑定。在RecyclerView.Adapter中,则提供了RecyclerView.ViewHolder机制,这个类必须我们自己定义,主要是用来保存视图的类,主要在onCreateViewHolder中实现View的保存
public static class ViewHolder extends RecyclerView.ViewHolder{ public TextView itemText; public ViewHolder(View itemView) { super(itemView); itemText = (TextView)findViewById(R.id.item_text); }}
@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = layoutInflater.inflate(R.layout.item_recyclerview,parent,false); return new ViewHolder(view);}另外还需要实现getCount()方法,也就是返回item的数量,另外 onBindViewHolder()方法实现对应的组件和数据绑定
@Overridepublic void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { ((ViewHolder)holder).itemText.setText(titleList.get(position));} 以下为我写的基本实现RecyclerView功能的一段小代码/**适配器类**/
public class RecyclerAdapter extends RecyclerView.Adapter { private List<String> titleList; private LayoutInflater layoutInflater; public RecyclerAdapter(Context context) { this.titleList = new ArrayList<>(); for(int i=0;i<30;i++) { titleList.add("item"+i); } layoutInflater = LayoutInflater.from(context); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = layoutInflater.inflate(R.layout.item_recyclerview,parent,false); return new ViewHolder(view); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { ((ViewHolder)holder).itemText.setText(titleList.get(position)); } @Override public int getItemCount() { return titleList.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { //public TextView itemText; public ViewHolder(View itemView) { super(itemView); } } }
/**
主界面代码
**/
mRecyclerView = (RecyclerView)pageList.get(SPORT).findViewById(R.id.recyclerview); mRecyclerView.setHasFixedSize(true); mLinearLayoutManager = new LinearLayoutManager(this); mLinearLayoutManager.setOrientation(OrientationHelper.VERTICAL); RecyclerAdapter mRecyclerAdapter = new RecyclerAdapter(this); mRecyclerView.setLayoutManager(mLinearLayoutManager); mRecyclerView.setAdapter(mRecyclerAdapter);
注:pageList.get(SPORT)为自己定义的一个实例化view,读者可以根据自己需要定制不同的xml文件并将其实例化为view
时间: 2024-12-22 12:40:55