RecyclerView是谷歌推出的新View,使用和listview差不多。
在此之前推荐一本书:跟着敲一遍你能从中级变高级,从习惯eclipse变成使用Android studio大神。
但是RecyclerView对于初学者还是有点难度,下面以最简短的代码让你一眼明白并牢记RecyclerView的使用方法
mRecyclerView = findViewById(R.id.id_recyclerview);
//设置布局管理器
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
//设置adapter
mRecyclerView.setAdapter(adapter)
//设置Item增加、移除动画
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
//添加分割线
mRecyclerView.addItemDecoration(new MyItemDecoration(
this, MyItemDecoration.HORIZONTAL));
只有这四个方法简单吗??、
特别需要做的是写自己的adapter
使用步骤:
①创建RecyclerView 对象
②设置适配器adapter
完成了。。。。
所以只要会写adapter就会用RecyclerView了
最简单的使用demo可参考http://blog.csdn.net/gfg156196/article/details/51727783
使用中的过程总结:
①导包,请导入RecyclerView的包,不要选择V7包。
compile 'com.android.support:recyclerview-v7:25.0.1'
②创建自己的adapter
/**
* Created by yugu88 on 2016/11/29.15:14
* 注意点:必须使用泛型Adapter<RecHoder>
*/
public class RecAdapter extends RecyclerView.Adapter<RecHoder> {
Activity content;
String[] menu_text;
public RecAdapter(Activity content, String[] menu_text) {
this.content=content;
this.menu_text=menu_text;
}
/**
* @return RecHoder 修改此返回类型为自己定义的ViewHolder
*/
@Override
public RecHoder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater=LayoutInflater.from(content);
View view=layoutInflater.inflate(R.layout.adapter_listview_menu, parent, false);
return new RecHoder(view);//创建自己的ViewHolder并返回此对象
}
/**
* @param holder 修改此ViewHolder的类型为自己定义的RecHoder
*/
@Override
public void onBindViewHolder(RecHoder holder, final int position) {
holder.tv_menu.setText(menu_text[position]);
Log.e("getItemCount",position+"");
holder.tv_menu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
@Override
public int getItemCount() {
return menu_text.length;
}
}
③创建自己的ViewHolder
/**
* Created by yugu88 on 2016/11/29.15:52
*/
public class RecHoder extends RecyclerView.ViewHolder {
public TextView tv_menu;
public RecHoder(View itemView) {
super(itemView);
tv_menu=(TextView) itemView.findViewById(R.id.tv_menu);
}
}
④在Activity中使用RecyclerView
listview_menu=(RecyclerView) findViewById(R.id.listview_menu);
listview_menu.setLayoutManager(new LinearLayoutManager(this));// 此句最最重要LinearLayoutManager就是listview类型的
//listview_menu.setLayoutManager(new GridLayoutManager(this,4));// 此为GridView类型的视图 4列
//创建adapter对象
RecAdapter recAdapter=new RecAdapter(this, menu_text);
//设置adapter
listview_menu.setAdapter(recAdapter);
setLayoutManager();的参数有如下几种:
LinearLayoutManager 线性管理器。支持横向、纵向。
GridLayoutManager 网格布局管理器StaggeredGridLayoutManager 瀑布就式布局管理器
如果需要分割线:
// 第二个参数是横线或者竖线的意思
listview_menu.addItemDecoration(new RecycleViewDivider(this, LinearLayoutManager.HORIZONTAL));
可以在setAdapter(recAdapter)之前或者之后都可以。
LinearLayoutManager.HORIZONTAL 表示分割线是横着画的,一般用在垂直滚动的listview。如下。
addItemDecoration该方法的参数为RecyclerView.ItemDecoration,该类为抽象类,我们需要继承它写一个自己的类。
它的源码很短,如下:
public static abstract class ItemDecoration {
public void onDraw(Canvas c, RecyclerView parent, State state) {
onDraw(c, parent);
}
@Deprecated
public void onDraw(Canvas c, RecyclerView parent) {
}
public void onDrawOver(Canvas c, RecyclerView parent, State state) {
onDrawOver(c, parent);
}
@Deprecated
public void onDrawOver(Canvas c, RecyclerView parent) {
}
@Deprecated
public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {
outRect.set(0, 0, 0, 0);
}
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, State state) {
getItemOffsets(outRect, ((LayoutParams) view.getLayoutParams()).getViewLayoutPosition(),
parent);
}
}
方法都没有实现,我们继承它实现自己的方法即可。
注意:onDraw方法,使用带有State state参数的方法。。
具体的画线的类如何写可以参考http://www.cnblogs.com/huolongluo/p/5879292.html
如果你实在是懒得写分割线,可以直接把别人的分割线类拿来使用。。。