recycleview线性布局和网格布局的切换
2017-12-15 07:49
260 查看
第一步:在adapter中重写getItemViewType()方法;添加setType(int type)方法
[java]
view plain
copy
//点击切换布局的时候通过这个方法设置type
public void setType(int type) {
this.type = type;
}
@Override
//用来获取当前项Item是哪种类型的布局
public int getItemViewType(int position) {
return type;
}
第二步:在点击布局切换图片时三步走
[java]
view plain
copy
if (goodsType==0){
ivGoodsType.setImageResource(R.mipmap.good_type_grid);
//1:设置布局类型
adapter.setType(1);
//2:设置对应的布局管理器
recyclerView.setLayoutManager(new GridLayoutManager(context,2));
//3:刷新adapter
adapter.notifyDataSetChanged();
goodsType=1;
}else {
ivGoodsType.setImageResource(R.mipmap.good_type_linear);
adapter.setType(0);
recyclerView.setLayoutManager(new LinearLayoutManager(context));
adapter.notifyDataSetChanged();
goodsType=0;
}
第三步:在adapter的onCreateViewHolder()方法中根据自己设置的布局类型切换item布局
[java]
view plain
copy
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View baseView;
if (viewType == 0) {
baseView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_listview_goods_list, parent, false);
LinearViewHolder linearViewHolder = new LinearViewHolder(baseView);
return linearViewHolder;
} else {
baseView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_gridview_goods_list, parent, false);
GridViewHolder gridViewHolder = new GridViewHolder(baseView);
return gridViewHolder;
}
}
简单的切换功能基本实现;接下来了解下滑动置顶位置出现置顶图片,点击图片实现RecyclerView置顶的功能;
置顶图片并非一直显示在屏幕上,而是通过监听滑动到一定距离才会显示;我们需要重写RecyclerView的滑动监听;
[java]
view plain
copy
//设置滑动监听
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
if (layoutManager instanceof LinearLayoutManager) {
LinearLayoutManager linearManager = (LinearLayoutManager) layoutManager;
//获取第一个可见位置
int firstVisibleItemPosition = linearManager.findFirstVisibleItemPosition();
//当滑动到第十个以上时显示置顶图标
if (firstVisibleItemPosition>10) {
ivStick.setVisibility(View.VISIBLE);
}else {
ivStick.setVisibility(View.GONE);
}
}
}
});
[java]
view plain
copy
//点击切换布局的时候通过这个方法设置type
public void setType(int type) {
this.type = type;
}
@Override
//用来获取当前项Item是哪种类型的布局
public int getItemViewType(int position) {
return type;
}
第二步:在点击布局切换图片时三步走
[java]
view plain
copy
if (goodsType==0){
ivGoodsType.setImageResource(R.mipmap.good_type_grid);
//1:设置布局类型
adapter.setType(1);
//2:设置对应的布局管理器
recyclerView.setLayoutManager(new GridLayoutManager(context,2));
//3:刷新adapter
adapter.notifyDataSetChanged();
goodsType=1;
}else {
ivGoodsType.setImageResource(R.mipmap.good_type_linear);
adapter.setType(0);
recyclerView.setLayoutManager(new LinearLayoutManager(context));
adapter.notifyDataSetChanged();
goodsType=0;
}
第三步:在adapter的onCreateViewHolder()方法中根据自己设置的布局类型切换item布局
[java]
view plain
copy
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View baseView;
if (viewType == 0) {
baseView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_listview_goods_list, parent, false);
LinearViewHolder linearViewHolder = new LinearViewHolder(baseView);
return linearViewHolder;
} else {
baseView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_gridview_goods_list, parent, false);
GridViewHolder gridViewHolder = new GridViewHolder(baseView);
return gridViewHolder;
}
}
简单的切换功能基本实现;接下来了解下滑动置顶位置出现置顶图片,点击图片实现RecyclerView置顶的功能;
置顶图片并非一直显示在屏幕上,而是通过监听滑动到一定距离才会显示;我们需要重写RecyclerView的滑动监听;
[java]
view plain
copy
//设置滑动监听
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
if (layoutManager instanceof LinearLayoutManager) {
LinearLayoutManager linearManager = (LinearLayoutManager) layoutManager;
//获取第一个可见位置
int firstVisibleItemPosition = linearManager.findFirstVisibleItemPosition();
//当滑动到第十个以上时显示置顶图标
if (firstVisibleItemPosition>10) {
ivStick.setVisibility(View.VISIBLE);
}else {
ivStick.setVisibility(View.GONE);
}
}
}
});
相关文章推荐
- RecyclerView线性布局和网格布局的切换
- RecycleView点击切换布局
- 使用RecycleView做网格布局
- recycle的加载更多以及网格和列表布局的随意切换
- 快速实现RecycleView的网格和瀑布流布局添加头部(尾部原理一样,故略之)
- 搜索商品点击图片切换线性布局和网格布局(代码有问题)
- 快速实现RecycleView的网格和瀑布流布局添加头部(尾部原理一样,故略之)
- RecyclerView切换布局(列表→网格)
- 快速实现RecycleView的网格和瀑布流布局添加头部(尾部原理一样,故略之)
- RecycleView点击切换布局
- Recyclerview支持下拉刷新、上拉加载,包括线性布局、网格布局和 流布局
- RecyclerView添加头尾部,支持网格和瀑布流布局
- 使用ViewPager和布局文件完成滑动切换
- IOS CollectionView 线性布局
- 关于Recycleview返回多个item布局
- RecyclerView 实战一 线性布局
- Android 使用LinearLayout.getChildAt(i)获取一个线性布局的view,并实现content中实现方法
- Android TV横向滚动网格布局——RecyclerView的使用
- Qt学习之路_7(线性布局和网格布局初步探索)
- Android recyclerView网格布局上拉加载更多视图的设计