接触了挺长时间的RecycleView了,也用RecycleView做过不少小东西了,但是每次用到它的时候还有些地方想不起来怎么写,然后去查书本、查博客,所以我觉得有必要为RecycleView写下点什么东西了。
首先对于RecycleView来说,如果想实现一些简单的功能,又对页面美观要求不高的话,只需知道几个点就够了
第一 RecycleView.ViewHolder
这个类一般都作为超类被一个叫做某某Holder的类继承,这个类的作用主要用来对RecycleView里面的item进行初始化,定义控件、控件获取id都需要在这个类里面写。
这个类里面只写一个构造方法,构造方法里面首先调用父类的构造方法,然后写item里面的控件获取id。如下面的代码所示:
private class SoundHolder extends RecyclerView.ViewHolder{ private Button mButton; public SoundHolder(LayoutInflater inflater,ViewGroup container){ super(inflater.inflate(R.layout.list_item_sound,container,false)); mButton=(Button)itemView.findViewById(R.id.list_item_sound_button); } }第二 适配器
第一次听这个名字的时候感觉好高大上啊,能叫某某器,适配器其实说白了就是一个类,只是因为它的功能较为强大所以称之为某某器,又因为它为RecycleView加载数据、适配item等,就给它起了一个名字,叫适配器。
适配器这个类是RecycleView.Adapter<某某Holder> ,这里的某某Holder也就是上面定义的那个类名。适配器类也被用作超类被一个叫某某Adapter的类继承,这个类里面要实现三个方法:
(1)onCreateViewHolder(View Group parent,int ViewType)
看名字想必也都猜出来了吧,在我的理解中,这个类主要用于创建RecycleView的item
(2)onBindViewHolder(SoundHolder holder, int position)
这个类主要用于绑定数据,在这个类中,将数据设置到item里面的控件上,使用Holder找到item,使用position找到数据位置。这个先说的抽象一点,看下面的代码就明白了。
(3)getItemCount()
这个类主要返回RecycleView中要添加的item数量。RecycleView添加多少个item都是这个方法说了算。
说了这么多,先看下代码:
private class SoundAdapter extends RecyclerView.Adapter<SoundHolder>{ @Override public SoundHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater inflater=LayoutInflater.from(getActivity()); return new SoundHolder(inflater,parent);//返回一个item,SoundHolder就是我上面定义的一个class } @Override public void onBindViewHolder(SoundHolder holder, int position) { holder.mButton.setText(datas.get(position));//为Button绑定数据,datas是一个List容器 } @Override public int getItemCount() { return datas.size();//返回要添加的item个数 } }
只要理解各个类、方法的作用,就不难理解RecycleView。
已经为RecycleView打好基础了。然后我们要获取一个RecycleView的控件了。
RecyclerView recyclerView=(RecyclerView)v.findViewById(R.id.fragment_recycle_view);可以忽略v.,因为我是写在Fragment上面的,所以有V.,写在Activity中直接findViewBuId。
然后我们要为这个RecycleView设置布局方式:
mCrimeRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));这里我设置为比较简单的线性布局,关于其他布局我会后续增加。
最后我们为RecycleView设置一个适配器。
recyclerView.setAdapter(new SoundAdapter());这样一个简单的RecycleView就完成了。