RecyclerView的Item多种类型的选择之普通方法实现
来源:互联网 发布:淘宝宝贝自检工具 编辑:程序博客网 时间:2024/05/23 01:59
首先上效果图:二种不同的管理器
以上的状态示意图:我们可以将头部和身体部分以及尾部部分看成三种不同的Type类型
代码如下:注释很清晰
第一步:窗口代码
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView); //设置listView管理器 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); //设置垂直方向 linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); mRecyclerView.setLayoutManager(linearLayoutManager); //Grid表格布局 /*GridLayoutManager gridLayoutManager = new GridLayoutManager(this,2); mRecyclerView.setLayoutManager(gridLayoutManager);*/ // 同时在adapter中必须去实现onAttachedToRecyclerView //设置其Adapter ProductAdapter productAdapter = new ProductAdapter(this); mRecyclerView.setAdapter(productAdapter); }
第二步:适配器中代码如下:
public class ProductAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Context mContext; public ProductAdapter(Context context) { this.mContext = context; } //设置三种不同Item类型,分别是头部,item,尾部 public static final int ITME_TYPE_HEADER = 1; public static final int ITME_TYPE_CONTENT = 2; public static final int ITME_TYPE_BOTTOM = 3; //模拟填充假数据 public String[] texts = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "P"}; //设置默认头部和底部数据只有一个 private int mHeadCount = 1; private int mButtomCount = 1; //获得内容的长度 public int getContentItemCount() { return texts.length; } //根据不同类型的viewType,创建不同的ViewHolder @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { switch (viewType) { case ITME_TYPE_HEADER: View view = LayoutInflater.from(mContext).inflate(R.layout.head_recycler_adapter, parent, false); return new HeadViewHolder(view); case ITME_TYPE_CONTENT: View view2 = LayoutInflater.from(mContext).inflate(R.layout.content_recycler_adapter, parent, false); return new ContentViewHolder(view2); case ITME_TYPE_BOTTOM: View view1 = LayoutInflater.from(mContext).inflate(R.layout.buttom_recycler_adapter, parent, false); return new ButtomViewHolder(view1); } return null; } //头部ViewHolder public static class HeadViewHolder extends RecyclerView.ViewHolder { HeadViewHolder(View itemView) { super(itemView); } } //尾部ViewHodler public static class ButtomViewHolder extends RecyclerView.ViewHolder { ButtomViewHolder(View itemView) { super(itemView); } } //内容ViewHodler public static class ContentViewHolder extends RecyclerView.ViewHolder { private TextView tv_item_text; ContentViewHolder(View itemView) { super(itemView); tv_item_text = (TextView) itemView.findViewById(R.id.tv_item_text); } } //绑定数据 @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { //hodler来区别绑定不同的数据 if (holder instanceof HeadViewHolder) { //具体的控件填充参数处理机其他如点击事件 } else if (holder instanceof ContentViewHolder) { //索引position必须要减去其头部的个数 ((ContentViewHolder) holder).tv_item_text.setText(texts[position - mHeadCount]); } else if (holder instanceof ButtomViewHolder) { //具体的控件填充参数处理机其他如点击事件 } } //返回总的视图个数 @Override public int getItemCount() { return mHeadCount + mButtomCount +getContentItemCount(); } //分别返回三种不同类型的TYPE @Override public int getItemViewType(int position) { int dataItemCount = getContentItemCount(); if (mHeadCount != 0 && position < mHeadCount) { return ITME_TYPE_HEADER; } else if (mButtomCount != 0 && position >= (dataItemCount + mHeadCount)) { return ITME_TYPE_BOTTOM; } else { return ITME_TYPE_CONTENT; } }//当如果是Grid布局的时候需要去实现 @Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); if(layoutManager instanceof GridLayoutManager) { final GridLayoutManager gridLayoutManager = (GridLayoutManager) layoutManager; gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { return getItemViewType(position) == ITME_TYPE_HEADER || getItemViewType(position) == ITME_TYPE_BOTTOM ? gridLayoutManager.getSpanCount():1; } }); } }}
第三步:简单的贴出使用CardView的代码–即content_recycler_adapter
compile 'com.android.support:recyclerview-v7:25.3.1'compile 'com.android.support:cardview-v7:25.3.1'<?xml version="1.0" encoding="utf-8"?><android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/cv_item" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="2dp" android:foreground="?android:attr/selectableItemBackground" card_view:cardBackgroundColor="#d7070b" card_view:cardCornerRadius="4dp" card_view:cardElevation="4dp"> <TextView android:layout_gravity="center_horizontal" android:id="@+id/tv_item_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="2dp" android:text="test"/></android.support.v7.widget.CardView>
以上:即可实现
阅读全文
0 0
- RecyclerView的Item多种类型的选择之普通方法实现
- RecyclerView的Item多种类型的选择和不同样式展示之利用框架方法实现
- RecyclerView 选择多个item的实现
- RecyclerView实现多种item布局
- 让多种类型item的Recyclerview能够上拉和下拉刷新--XRefreshView
- Android之ListView包含多种类型的Item
- RecyclerView多种item类型头部底部
- RecyclerView实现加载多种条目类型,仿新闻列表多种item布局.
- ListView实现多种item布局的方法和注意事项
- ListView实现多种item布局的方法和注意事项
- RecyclerView实现多种Item,最优雅的方式,getItemViewType(以即时通讯app为例子)
- RecyclerView显示不同的类型的item
- Recyclerview的多类型item入门
- Recyclerview 多种 item 布局的通用 Adapter MultiItemAdapter
- Android中RecyclerView的item运用覆盖view的方法实现item的动画效果
- listview里面的item的多种view模式(多种类型的item)
- RecyclerView多种item布局
- RecyclerView的Item点击事件实现总结
- log4j日志输出性能优化-缓存、异步
- 微信(五):wx_sample.php
- 面向语法分析的word2vec修正
- 模板类中重载<<和>>操作符
- Java中判断数组是否为空?
- RecyclerView的Item多种类型的选择之普通方法实现
- MVC读取JSON文件
- hbuilder在夜神模拟器运行应用
- Spring Boot快速入门
- Mac 安装 Mysql 后设置密码
- [LeeCode]Palindrome Number
- PHP中var用与不用的区别
- Windows下的Nginx安装与配置(PHP)
- sparkcrawler安装