简介和准备
相信大家对RecyclerView都不陌生了。自RecyclerView的出现开始,它就慢慢占据了我们日常开发使用的频率。所以掌握它就显得格外重要了。ReclclerView将各个模块的操作进行了拆解。很好的解决耦合问题。正是因为这种解耦让你做的事情更多,也更强大。逻辑也格外的清晰。
RecyclerView是Support-V7架包中得一个组件。所以在使用前必须先升级support lib,然后导入support-v7。
实例
首先在build.gradle文件添加依赖库
1 | dependencies { |
MainAcvtivity
1 | public class MainActivity extends Activity { |
setLayoutManager()
该方法是给每个Item设置一个布局管理器。有三种布局布局管理器
- LinearLayoutManager线性布局管理器
- GridLayoutManager网格布局管理器
- StaggeredGridLayoutManager瀑布网格布局管理器
使用上面的布局管理器可以很轻松的实现ListView和GriView以及瀑布流的效果。既然这么吊还用ListView和GridView吗!
FlowViewAdapter1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49public class ListViewAdapter extends RecyclerView.Adapter<ListViewAdapter.MyViewHolder> {
List<String> list=new ArrayList<String>();
private Context context;
public ListViewAdapter(Context context){
for(int i=0;i<100;i++){
list.add("列表:"+i);
}
this.context=context;
}
@Override
public int getItemCount() {
return list.size();
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//创建Item的ViewHodler
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.recycler_item_list_view, parent,
false));
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
//在此处完成布局的展示设值
holder.tv.setText(list.get(position));
holder.tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context,""+position,Toast.LENGTH_SHORT);
}
});
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView tv;
public MyViewHolder(View view) {
super(view);
tv = (TextView) view.findViewById(R.id.textView);
}
}}
RecyclerView的Adapter的不同之处是你在继承RecyclerView.Adaper必需现实一个ViewHolder。在创建的时候会将这个每个Item_layour转化成Viewholder。在传递给onBindViewHolder方法去做布局展示设值。还有一点和ListView不同的是每个控件的点击事件都需要自己去实现,包括Item的点击事件。所以recyclerView.setOnclickListener()就不能用了。
布局文件1
2
3
4
5
6
7
8
9
10
11
12
13<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_marginTop="5dp"
android:layout_marginLeft="5dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageView"
android:gravity="center"
android:background="@mipmap/a"
android:layout_gravity="center_horizontal" />
</LinearLayout>
基本上就这些了。有些Apdater的代码没有贴出来,大家可以去源代码中去查看
源码地址
效果图
基本效果就是这样了,三个按钮分别对应三个Adpater.只需一个控件即可实现ListView和GridView和瀑布流的效果