好久没有写过博客了,一直忙啊忙,最近想起来,这些东西不能荒废了,今天收拾好自己,要坚持写下去!
Recycleview的效果和我们经常使用过的ListView、GridView效果是一样的。那么为什么还要使用Recycleview呢?RecyclerView架构,提供了一种插拔式的体验,高度的解耦,非常灵活,因此RecyclerView可以完成各种各样的界面,而不仅仅是ListView
下面我就说一说Recycleview的基本用法,这篇博客主要内容:
* Adapter:如何创建
* 布局管理器
* 分割线
首先要添加一个Recycleview的依赖:
compile 'com.android.support:design:25.0.1'
或者
compile 'com.android.support:recyclerview-v7:23.1.1'
在布局中像使用ListView一样使用Recycleview
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
我这里没有用网络请求数据,自己用for循环添加的数据,目的是为了展示。
数据创建,setAdapter使用与ListView一模一样,不同的是:Adapter,还有布局管理器
布局管理器:
这里介绍三种布局管理器
1、LinearLayoutManager
//线性布局管理器
private void MyLinearLayoutManager() {
//线性布局管理器 ListView 效果 获取横向的ListVIew
LinearLayoutManager linearlayoutManager = new LinearLayoutManager(MainActivity.this);
//设置布局的方向
linearlayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
mRecyclerView.setLayoutManager(linearlayoutManager);
}
2、GridLayoutManager
/**
* GridView效果
*/
private void MyGridLayoutManager() {
GridLayoutManager gridlayoutManager = new GridLayoutManager(MainActivity.this, 3);
gridlayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(gridlayoutManager);
}
3、StaggeredGridLayoutManager
/**
* 瀑布流效果
*/
private void MyStaggeredGridLayoutManager() {
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(staggeredGridLayoutManager);
}
在setAdapter之后设置布局管理器,可以有让人惊叹的效果哟
MainActivity:
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
//数据源对象
private List<String> list = new ArrayList<>();
private MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = ((RecyclerView) findViewById(R.id.recyclerView));
//1,获取数据
for (int i = 0; i < 100; i++) {
list.add("====数据===" + i);
}
//2,缺少adapter对象 展示数据源
adapter = new MyAdapter(MainActivity.this, list);
mRecyclerView.setAdapter(adapter);
//3,设置布局管理器
MyLinearLayoutManager();
// MyGridLayoutManager();
// MyStaggeredGridLayoutManager();
}
/**
* 瀑布流效果
*/
private void MyStaggeredGridLayoutManager() {
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(staggeredGridLayoutManager);
}
/**
* GridView效果
*/
private void MyGridLayoutManager() {
GridLayoutManager gridlayoutManager = new GridLayoutManager(MainActivity.this, 3);
gridlayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(gridlayoutManager);
}
//线性布局管理器
private void MyLinearLayoutManager() {
//线性布局管理器 ListView 效果 获取横向的ListVIew
LinearLayoutManager linearlayoutManager = new LinearLayoutManager(MainActivity.this);
//设置布局的方向
linearlayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
mRecyclerView.setLayoutManager(linearlayoutManager);
}
}
Adapter
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private Context context;
private List<String> list;
public MyAdapter(Context context, List<String> list){
this.context = context;
this.list = list;
}
/**
* 创建ViewHolder对象
* @param parent item的父布局 RecyclerView
* @param viewType item的类型 根据ViewType加载不同的布局 没有0 开始的限制
* @return
*/
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
ViewHolder viewHolder = new ViewHolder(LayoutInflater.from(context).inflate(R.layout.item,parent,false));
return viewHolder;
}
/**
* 加载数据的
* @param holder 包含View控件
* @param position 当前的位置 用于获取数据源里的数据
*/
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.tv.setText(list.get(position));
ViewGroup.LayoutParams params = holder.tv.getLayoutParams();
//随机设置tv的高度
// params.height = (int) (100+Math.random()*400);
holder.tv.setLayoutParams(params);
}
/**
* 数据源的数量
* @return
*/
@Override
public int getItemCount() {
return list==null?0:list.size();
}
/**
* 创建一个ViewHolder类
*/
public static class ViewHolder extends RecyclerView.ViewHolder{
TextView tv;
public ViewHolder(View itemView) {
super(itemView);
tv = (TextView) itemView.findViewById(R.id.tv_item);
}
}
}