Android RecyclerView实现加载多种条目类型
今天咱们是用RecyclerView来实现这个多种Item的加载.
其实最关键的是要复写RecyclerView的Adapter中的getItemViewType()方法 这个方法就根据条件返回条目的类型 这个MoreTypeBean 是用来传数据的 没必要跟我写的一样,
其实就是从activity中传到adapter中的数据中必须要有一个type字段来判断这个item对象需要那种视图,然后return出一个标记,在onCreateViewHolder中在引用所对应的item布局.
//重写getItemViewType方法 根据条件返回条目的类型
@Override
public int getItemViewType(int position) {
MoreTypeBean moreTypeBean = mData.get(position);
if (moreTypeBean.type == 0) {
return TYPE_PULL_IMAGE;
} else if (moreTypeBean.type == 1) {
return TYPE_RIGHT_IMAGE;
} else {
return TYPE_THREE_IMAGE;
}
}
一般有多少种类型我们定义多少种常量.(我今天写了三种布局 所以我定义了三个)
//定义三种常量 表示三种条目类型
public static final int TYPE_PULL_IMAGE = 0;
public static final int TYPE_RIGHT_IMAGE = 1;
public static final int TYPE_THREE_IMAGE = 2;
有了上面定义的常量之后 在onCreateViewHolder里根据viewtype来判断 所引用的item布局类型 这样每一条item就会不一样了
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//创建不同的 ViewHolder
View view;
//根据viewtype来判断
if (viewType == TYPE_PULL_IMAGE) {
view =View.inflate(parent.getContext(),R.layout.item_pull_img,null);
return new PullImageHolder(view);
} else if (viewType == TYPE_RIGHT_IMAGE) {
view =View.inflate(parent.getContext(),R.layout.item_right_img,null);
return new RightImageHolder(view);
} else {
view =View.inflate(parent.getContext(),R.layout.item_three_img,null);
return new ThreeImageHolder(view);
}
}
创建三种不同的ViewHolder
private class PullImageHolder extends RecyclerView.ViewHolder {
public PullImageHolder(View itemView) {
super(itemView);
}
}
private class RightImageHolder extends RecyclerView.ViewHolder {
public RightImageHolder(View itemView) {
super(itemView);
}
}
private class ThreeImageHolder extends RecyclerView.ViewHolder {
public ThreeImageHolder(View itemView) {
super(itemView);
}
}
下面把所有的代码都给大家:
Activity中的代码
public class Recycler_variety_Activity extends Activity {
private int[] icons = {R.drawable.test, R.drawable.test1, R.drawable.test2, R.drawable.test3, R.drawable.test4, R.drawable.test5, R.drawable.test6};
private RecyclerView mRecy;
private List<MoreTypeBean> mData;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recycler_variety_activity);
initView();
initData();
initViewOper();
}
private void initView() {
mRecy = (RecyclerView) findViewById(R.id.act_recycler_variety_recycler);
}
private void initData() {
mData = new ArrayList<>();
// 随机数 用来标记item界面的类型
Random random = new Random();
for (int i = 0; i < icons.length; i++) {
MoreTypeBean more = new MoreTypeBean();
more.pic = icons[i];
more.type = random.nextInt(3);
mData.add(more);
}
}
private void initViewOper() {
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
mRecy.setLayoutManager(linearLayoutManager);
Recycler_variety_Adapter adapter = new Recycler_variety_Adapter(mData);
mRecy.setAdapter(adapter);
}
}
recyclerview_test_layout的布局就是只有一个RecyclerView
<android.support.v7.widget.RecyclerView
android:id="@+id/act_recycler_variety_recycler"
android:layout_width="match_parent"
android:background="#d3d3d3"
android:layout_height="match_parent"/>
RecyclerView的Adapter
public class Recycler_variety_Adapter extends RecyclerView.Adapter {
//定义三种常量 表示三种条目类型
public static final int TYPE_PULL_IMAGE = 0;
public static final int TYPE_RIGHT_IMAGE = 1;
public static final int TYPE_THREE_IMAGE = 2;
private List<MoreTypeBean> mData;
public Recycler_variety_Adapter(List<MoreTypeBean> data) {
this.mData = data;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//创建不同的 ViewHolder
View view;
//根据viewtype来创建条目
if (viewType == TYPE_PULL_IMAGE) {
view =View.inflate(parent.getContext(),R.layout.item_pull_img,null);
return new PullImageHolder(view);
} else if (viewType == TYPE_RIGHT_IMAGE) {
view =View.inflate(parent.getContext(),R.layout.item_right_img,null);
return new RightImageHolder(view);
} else {
view =View.inflate(parent.getContext(),R.layout.item_three_img,null);
return new ThreeImageHolder(view);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
}
@Override
public int getItemCount() {
if (mData != null) {
return mData.size();
}
return 0;
}
//根据条件返回条目的类型
@Override
public int getItemViewType(int position) {
MoreTypeBean moreTypeBean = mData.get(position);
if (moreTypeBean.type == 0) {
return TYPE_PULL_IMAGE;
} else if (moreTypeBean.type == 1) {
return TYPE_RIGHT_IMAGE;
} else {
return TYPE_THREE_IMAGE;
}
}
/**
* 创建三种ViewHolder
*/
private class PullImageHolder extends RecyclerView.ViewHolder {
public PullImageHolder(View itemView) {
super(itemView);
}
}
private class RightImageHolder extends RecyclerView.ViewHolder {
public RightImageHolder(View itemView) {
super(itemView);
}
}
private class ThreeImageHolder extends RecyclerView.ViewHolder {
public ThreeImageHolder(View itemView) {
super(itemView);
}
}
}
item_pull_img布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:padding="7dp"
android:background="#fff"
android:orientation="vertical"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000"
android:text="多种条目类型,多种条目类型,多种条目类型,多种条目类型,多种条目类型"
android:textSize="16sp"
/>
<ImageView
android:layout_width="match_parent"
android:layout_height="150dp"
android:background="@drawable/sucai6"
android:scaleType="fitXY"
/>
</LinearLayout>
<View
android:layout_marginTop="3dp"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#d3d3d3"
/>
</LinearLayout>
item_right_img布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="100dp"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#fff"
android:orientation="horizontal"
android:padding="7dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="多种条目类型,多种条目类型,多种条目类型,多种条目类型,多种条目类型,多种条目类型,多种条目类型,多种条目类型"
android:textColor="#000"
android:textSize="16sp" />
<ImageView
android:layout_width="120dp"
android:layout_height="90dp"
android:background="@drawable/sucai" />
</LinearLayout>
<View
android:layout_marginTop="3dp"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#d3d3d3"
/>
</LinearLayout>
item_three_img布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:background="#fff"
android:padding="7sp"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="多种条目类型,多种条目类型,多种条目类型,多种条目类型,多种条目类型,多种条目类型多种条目类型"
android:textColor="#000"
android:textSize="16sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:layout_width="0dp"
android:layout_height="80dp"
android:layout_weight="1"
android:scaleType="fitXY"
android:src="@drawable/sucai3" />
<View
android:layout_width="6dp"
android:layout_height="0dp"/>
<ImageView
android:layout_width="0dp"
android:layout_height="80dp"
android:layout_weight="1"
android:scaleType="fitXY"
android:src="@drawable/sucai4" />
<View
android:layout_width="6dp"
android:layout_height="0dp"/>
<ImageView
android:layout_width="0dp"
android:layout_height="80dp"
android:layout_weight="1"
android:scaleType="fitXY"
android:src="@drawable/sucai5" />
</LinearLayout>
</LinearLayout>
<View
android:layout_marginTop="3dp"
android:background="#d3d3d3"
android:layout_width="match_parent"
android:layout_height="1dp"/>
</LinearLayout>
MoreTypeBean
public class MoreTypeBean {
public int type;
public int pic;
}
Android RecyclerView实现加载多种条目类型的更多相关文章
- Android图片异步加载之Android-Universal-Image-Loader
将近一个月没有更新博客了,由于这段时间以来准备毕业论文等各种事务缠身,一直没有时间和精力沉下来继续学习和整理一些东西.最近刚刚恢复到正轨,正好这两天看了下Android上关于图片异步加载的开源项目,就 ...
- Android图片异步加载之Android-Universal-Image-Loader(转)
今天要介绍的是Github上一个使用非常广泛的图片异步加载库Android-Universal-Image-Loader,该项目的功能十分强大,可以说是我见过的目前功能最全.性能最优的图片异步加载解决 ...
- 实现Android ListView 自动加载更多内容
研究了几个小时终于实现了Android ListView 自动加载的效果. 说说我是怎样实现的.分享给大家. 1.给ListView增加一个FooterView,调用addFooterView(foo ...
- [Android] Android 用于异步加载 ContentProvider 中的内容的机制 -- Loader 机制 (LoaderManager + CursorLoader + LoaderManager.LoaderCallbacks)
Android 用于异步加载 ContentProvider 中的内容的机制 -- Loader 机制 (LoaderManager + CursorLoader + LoaderManager.Lo ...
- Android 高清加载巨图方案 拒绝压缩图片
Android 高清加载巨图方案 拒绝压缩图片 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/49300989: 本文出自:[张 ...
- Android 图片异步加载的体会,SoftReference已经不再适用
在网络上搜索Android图片异步加载的相关文章,目前大部分提到的解决方案,都是采用Map<String, SoftReference<Drawable>> 这样软引用的 ...
- [Android] Android ViewPager 中加载 Fragment的两种方式 方式(二)
接上文: https://www.cnblogs.com/wukong1688/p/10693338.html Android ViewPager 中加载 Fragmenet的两种方式 方式(一) 二 ...
- [Android] Android ViewPager 中加载 Fragment的两种方式 方式(一)
Android ViewPager 中加载 Fragmenet的两种方式 一.当fragment里面的内容较少时,直接 使用fragment xml布局文件填充 文件总数 布局文件:view_one. ...
- Android开发 - ImageView加载Base64编码的图片
在我们开发应用的过程中,并不是所有情况下都请求图片的URL或者加载本地图片,有时我们需要加载Base64编码的图片.这种情况出现在服务端需要动态生成的图片,比如: 二维码 图形验证码 ... 这些应用 ...
随机推荐
- Spring Cloud(八)高可用的分布式配置中心 Spring Cloud Config
在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config,它支持配 ...
- django-bootstrap4|django 加载popper.min.js失败
1.现象 2.解决过程 2.1.右键查看网页源代码 在浏览器地址栏打开popper.min.js对应的URL,发现无法打开,这个地址是国外的,需要找一个可访问的地址替换. 2.2.找到URL在djan ...
- 2.03_01_Python网络爬虫urllib2库
一:urllib2库的基本使用 所谓网页抓取,就是把URL地址中指定的网络资源从网络流中抓取出来.在Python中有很多库可以用来抓取网页,我们先学习urllib2. urllib2 是 Python ...
- Ubuntu安装libssl-dev失败(依靠aptitude管理降级软件)并记录dpkg展示安装软件列表
Ubuntu 12.04LTS下直接安装 libssl-dev 失败 提示错误: $ sudo apt-get install libssl-dev Reading package lists... ...
- C++踩坑记录(一)std:;string的析构
之前写服务端程序有一个往消息队列里面推json的过程,然后发现推进去C#端取到的无论如何都是个空指针 简单复现一下现场 string str1 = string("hello1") ...
- awk的妙用
终端形式 有人说awk的优势在于可以个性化输出命令,这么说来太抽象了,假如我们查看占用6379端口的进程信息. lsof -i: 输出结果: COMMAND PID USER FD TYPE DEVI ...
- C# WebClient 的文件上传下载
上传文件 string path = openFileDialog1.FileName; WebClient wc = new WebClient(); wc.Credentials = Creden ...
- 嵌入式linux修改日期时间
命令格式为: date -s 时间字符串 例如只修改系统的日期,不修改时间(时分秒) date -s 2012-08-02 或只修改时间不修改日期 date -s 10:08:00 当然也可以同时修改 ...
- ansible API 常用模块
常用模块 用于读取yaml,json格式的文件 from ansible.parsing.dataloader import DataLoader #用于管理变量的类,包括主机,组,扩展等变量 fro ...
- POI读取格式化后的单元格数据
public static String getFormattedValue(Cell cell) { FormulaEvaluator evaluator = cell.getSheet().get ...