Android RecyclerView 实现ListView GridView混排
来源:互联网 发布:高考文言文阅读 知乎 编辑:程序博客网 时间:2024/05/05 16:16
1、Adapter中定义不同Item类型,复写getItemViewType方法
2、在onCreateViewHolder中根据viewType返回不同的ViewHolder
3、onBindViewHolder根据不同ViewHolder渲染内容
4、Activity中定义GridLayoutManager
5、复写GridLayoutManager.setSpanSizeLookup。
关键代码
Adapter
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { public static final int TYPE_LIST = 0, TYPE_GRID = 1; private LayoutInflater inflater; private List<String> datas = new ArrayList<>(); public MyAdapter(Context context) { inflater = LayoutInflater.from(context); String[] array = {"a", "a", "a", "a", "a", "a", "a", "a", "a", "a"}; datas.addAll(Arrays.asList(array)); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == TYPE_LIST) { View view = inflater.inflate(R.layout.item_listview, parent, false); ViewHolderList viewHolder = new ViewHolderList(view); viewHolder.textView = (TextView) view.findViewById(R.id.tv); return viewHolder; } else { View view = inflater.inflate(R.layout.item_gridview, parent, false); ViewHolderGrid viewHolder = new ViewHolderGrid(view); viewHolder.imageView = (ImageView) view.findViewById(R.id.iv_grid); return viewHolder; } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof ViewHolderList) { ViewHolderList viewHolder = (ViewHolderList) holder; viewHolder.textView.setText(datas.get(position)); } else { } } @Override public int getItemCount() { return datas.size(); } @Override public int getItemViewType(int position) { return position < 5 ? TYPE_LIST : TYPE_GRID; } class ViewHolderList extends RecyclerView.ViewHolder { private TextView textView; public ViewHolderList(View itemView) { super(itemView); } } class ViewHolderGrid extends RecyclerView.ViewHolder { private ImageView imageView; public ViewHolderGrid(View itemView) { super(itemView); } }}
Activity代码:
mRecyclerView = (RecyclerView) findViewById(R.id.recycler); adapter = new MyAdapter(this); GridLayoutManager layoutManager = new GridLayoutManager(this, 2); layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { switch (adapter.getItemViewType(position)) { case MyAdapter.TYPE_LIST: return 2; case MyAdapter.TYPE_GRID: return 1; default: return -1; } } }); mRecyclerView.setLayoutManager(layoutManager); mRecyclerView.setAdapter(adapter);
0 0
- Android RecyclerView 实现ListView GridView混排
- RecyclerView下实现 ListView GridView 混排
- 使用RecyclerView实现GridView和ListView混排的效果
- RecyclerView的GridView和ListView的混排处理
- 【Android基础笔记09】ListView图文混排+GridView
- RecyclerView--实现 ListView,GridView,瀑布流 效果
- 使用RecyclerView实现ListView,GridView效果
- RecyclerView实现ListView和GridView的效果
- RecyclerView实现ListView、GridView、瀑布流
- Android RecyclerView之代替ListView与GridView
- Android | ListView 、GridView 和 RecyclerView 概述
- Android RecyclerView实现listview效果
- Android中Recyclerview使用1----实现ListView,GridView,瀑布流样式
- android网络数据获取与解析+RecyclerView数据展示实现ListView、GridView、瀑布流切换
- RecyclerView下实现 ListView嵌套GridView 复杂效果
- RecyclerView实现listview+GridView之间切换的小demo
- 利用 Android异步任务AsyncTask 实现ListView 图文混排
- android ListView异步加载图片,完美实现图文混排
- TCP协议三次握手和四次挥手
- 集成第三方推送最佳实践
- Shared and Exclusive Locks 共享和排它锁
- Java BigDecimal详解
- Material Design Lite学习(一) 概述及环境搭建
- Android RecyclerView 实现ListView GridView混排
- Docker整理之Docker镜像相关(三)
- 关于mui scroll使用笔记
- 如何评估需求对公司的价值,简单三点概括
- 8. String to Integer (atoi)
- Primavera Unifier项目控制中心解决方案
- 超分辨率重建学习——一些矩阵的知识点
- python 第三方库下载地址
- Linux基金会宣布JS Foundation基金会成立 前身为jQuery团队