Android RecyclerView(一)综合使用综述(Android 5.0 新特性)
RecyclerView是support.v7包中的控件,可以说是ListView和GridView的增强升级版。
RecyclerView可加载列表样式的数据,类似ListView的加载效果,也可以加载九宫格样式(类似GridView效果)或者瀑布流样式数据,也就是说RecyclerView的可扩展性强,所以在使用时,必须要指定其显示的基本样式
LinearLayoutManager 线性,显示数据格式为列表样式
GridLayoutManager 九宫格样式
StaggeredGridLayoutManager 瀑布流样式
1 RecyclerView 基本使用
添加依赖
compile 'com.android.support:recyclerview-v7:25.0.0'
1.1 布局文件中创建使用
<android.support.v7.widget.RecyclerView
android:id = "@+id/rv_list"
android:layout_width = "match_parent"
android:layout_height = "match_parent" />
1.2 java代码中加载 设置列表模式
1.2.1 水平方向滑动
//加载RecyclerView
RecyclerView contentRecyclerView = (RecyclerView) findViewById(R.id.rv_list);
//初始化数据
List<String> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
list.add("智慧安卓 -- "+i);
}
//初始化Adapter
ListRecyclerAdapter recyclerAdapter = new ListRecyclerAdapter(this.getApplication(),list);
//初始化排列布局
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this.getApplicationContext());
//设置
contentRecyclerView.setLayoutManager(linearLayoutManager);
//设置水平排列
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
//设置adapter
contentRecyclerView.setAdapter(recyclerAdapter);
1.2.2 竖直方向滑动
//设置竖直排列
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
1.2.3 ListRecyclerAdapter配制
public class ListRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context mContext;
private List<String> mList;
public ListRecyclerAdapter(Application application, List<String> list) {
mContext = application;
mList = list;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view =View.inflate(mContext,R.layout.item,null);
return new ListRecyclerViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
}
@Override
public int getItemCount() {
return mList.size();
}
private static class ListRecyclerViewHolder extends RecyclerView.ViewHolder{
public ListRecyclerViewHolder(View itemView) {
super(itemView);
}
}
}
1.3 java代码中加载 设置九宫格模式
1.3.1 竖直方向滑动
//加载RecyclerView
RecyclerView contentRecyclerView = (RecyclerView) findViewById(R.id.rv_list);
//初始化数据
List<String> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
list.add("智慧安卓 -- "+i);
}
//初始化Adapter
ListRecyclerAdapter recyclerAdapter = new ListRecyclerAdapter(this.getApplication(),list);
//初始化排列布局
//参数一 上下文对象
//参数二 列数
GridLayoutManager gridLayoutManager = new GridLayoutManager(this.getApplicationContext(),3);
//设置
contentRecyclerView.setLayoutManager(gridLayoutManager);
//设置水平排列
gridLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
//设置adapter
contentRecyclerView.setAdapter(recyclerAdapter);
1.3.2 横向滑动
//设置竖直排列
gridLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
1.3.3 ListRecyclerAdapter配制
如 1.2.3 中所写Adapter
1.5 java代码中加载 设置瀑布流模式
在这里使用到的条目布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/ll_root_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="1dp"
android:background="#fff"
android:orientation="vertical">
<TextView
android:id="@+id/tv_item_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#5659fa"
android:gravity="center"
android:text="测试数据" />
</RelativeLayout>
</RelativeLayout>
1.5.1 上下方向滑动
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rv_list);
//设置布局模式为 竖直方向
//参数一 显示内容为两列
//参数二 子条目排列方式为 水平方式
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2,
StaggeredGridLayoutManager.VERTICAL);
// 设置布局模式
recyclerView.setLayoutManager(staggeredGridLayoutManager);
//初始化Adapter
WaterFallRecyclerAdapter recyclerAdapter = new WaterFallRecyclerAdapter(this.getApplication(),list);
//设置Adapter
recyclerView.setAdapter(recyclerAdapter);
需要注意的是,在这种效果中,显示的每一个Item的高度都不一样,这需要动态的设置Item的高度,否则不会出现这样的效果
//创建适配器 Adapter 与上述创建方式一致
//创建 Holder
private static class CustomViewHolder extends RecyclerView.ViewHolder {
public CustomViewHolder (View itemView) {
super(itemView);
RelativeLayout rootLinearLayout = itemView.findViewById(R.id.ll_root_view);
//获取RelativeLayout对应的LayoutParams
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) rootLinearLayout.getLayoutParams();
if (lp != null) {
//重新设置LinearLayout的高度
lp.height = (int) (200 + Math.random() * 600);
rootLinearLayout.setLayoutParams(lp);
}
}
}
1.5.2 左右方向滑动
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rv_list);
//设置布局模式为 竖直方向
//参数一 显示内容为两列
//参数二 子条目排列方式为 竖直方式
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2,
StaggeredGridLayoutManager.HORIZONTAL);
// 设置布局模式
recyclerView.setLayoutManager(staggeredGridLayoutManager);
//初始化Adapter
WaterFallRecyclerAdapter recyclerAdapter = new WaterFallRecyclerAdapter(this.getApplication(),list);
//设置Adapter
recyclerView.setAdapter(recyclerAdapter);
需要注意的是,在这种效果中,显示的每一个Item的宽度都不一样,这需要动态的设置Item的宽度,否则不会出现这样的效果