Android ListView的adapter中如何重用不同类型的item

如题,我要做的效果是一个listView中能显示不同类型的item,而且我希望同一类的item能够在滑动时候进行重用。
比如说,我一个listView中,会显示纯文字的item、纯图片的item、纯视屏的item,我在滑动的时候会根据我的数据类型进行选择加载,我希望我除了开始的时候为它们创建view以外,之后滑动下去以后都是重用之前的item,纯文字的item重用之前显示过的纯文字的item、纯图片的item重用之前显示过的纯图片的item、纯视屏的item重用之前显示过的纯视屏的item

0

7个回答

你的例子里面纯文字的item、纯图片的item、纯视屏的item共3种type
1.继承BaseAdapter
2.覆盖如下方法
1)getViewTypeCount() 你的例子是返回3
2 ) getItemViewType() 为你的每种item顶一个编号,形成position到type的映射
3.接下来你就可以在getView中重用对象,之前已经有position到type的映射了,你可以得到convertview当前的type类型了
4.不谢

1
izzxacbbt
zzxsw 很棒
9 个月之前 回复
leilba
林深 还是要谢谢你
3 年多之前 回复

getItemViewType(),getViewTypeCount()
http://blog.csdn.net/qq_15771061/article/details/50278407

1

只能屏幕可见的缓冲区重用。
不同布局自己继承baseadapter,然后重写getItemViewType

0

你可以学习下一些listview的一些使用

0

使用Google推荐使用替代ListView的RecyclerView他会自动帮你回收不用的item并重用

0

可以让后台返回一个item的标识 在adapter 的 getview 根据标识进行选择

0

你的例子里面纯文字的item、纯图片的item、纯视屏的item共3种type
1.继承BaseAdapter
2.覆盖如下方法
1)getViewTypeCount() 你的例子是返回3
2 ) getItemViewType() 为你的每种item顶一个编号,形成position到type的映射
3.接下来你就可以在getView中重用对象,之前已经有position到type的映射了,你可以得到convertview当前的type类型了

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android开发之ListView不同类型item的展示
在android开发过程中,我们经常会遇到一些比较复杂的布局,比如说商城类app的首页,需要展示不同的布局,用以体现app界面的美观效果,在这样的情况下,如何灵活运用ListView就显得非常重要了,本文讲述的是如果使用ListView展示不同的item类型。文章的结尾会附上demo的下载连接,有需要的可以下载看看。 先上效果图: 接下来看看代码: 先看xml的代码: ac
ListView复用和优化详解
前言 我们每一个Android开发人员对ListView的使用肯定是很熟悉的,然而多少人能真正的懂ListView的缓存机制呢,说白了就是ListView为了提高效率而内部实现的一种优化,而这种优化就需要复用ItemView(也就是item对应的View).那么下面楼主来对ListView和RecyclerView的item复用问题做一个深入的讲解
listview的重要属性viewtype,实现多类型item样式
listview作为传统展示大量数据的基本控件,其回收能力是核心。考虑到实际业务的需求,不会用单一样式,因此,view type使得多样式的列表结构变得简单清晰。
listview如何包含不同类型的Item
 listview可以说是在我们安卓的日常开发中用到最多的控件,它主要用于一些列表的显示。ListView不与数据直接打交道,它需要适配器Adapter作为中间的桥梁。今天我要写的listview如何包含不同类型的Item,实际也是在Adapter里面做相应的处理。适配器我们常用的ArrayAdapter,SimpleAdapter和BaseAdapter,而前面两个实际是继承自BaseAd
listview加载不同布局
今天面试问到了这个,回家来做一下笔记, 顺便实现一下效果。我的做法是:1、定义一个类,在这个类里有不同布局所需要的所有字段。 2、在自定义adapter里根据当前数据的字段来判断应该加载哪个布局 3、在自定义adapter里实现了不同布局的ViewHolder,根据不同的布局实例化不同的ViewHolder类注意: 1、getViewTypeCount方法返回一共有几种不同类型的布局,我这里是
Android ListView实现不同item的方法和原理分析
ListView实现不同item的方法和原理分析 一问题抛出 Listview是android里面的重要组件,用来显示一个竖向列表,这个没有什么问题;但是有个时候列表里面的item不是一样的,如下图,列表里面应该有3种类型的item   1. 头像在左边的气泡Item ,比如”今天下午我就不出来了,...” 2. 头像在右边的气泡Item,比如”那就等着我发你好吧” 3
Android ListView加载多item布局及性能优化
在开发过程中,遇到一些比较旧的项目,请求网络数据时,接口返回一长串的JSON字符串,其中包括各种不相关的数据。而我们又需要把这些数据一一对应写在同一个界面上,又需要分别展示在不同的布局上,这时候就需要用到ListView
Android中listview的item布局中button点击事件position混乱解决
最近切换到安卓开发项目so记录下平时遇到的小问题: 一、ListView中嵌套button按钮时会发现有时候点击button的onclick事件,onclick中如果操作的有position这个参数会发现position会混乱 仔细思考了下应该是回调的问题,当触发onclick的回调时使用的position并不是设置监听时的position。所以为了让这个position是真实对 应的pos
Android 解决ListView的复用问题
ListView是大家在项目的开发过程中不可避免要使用到的,使用ListView的同时我们还要使用到适配器,如果ListView只有一两条数据的话我们可能不会考虑到用ListView的复用机制,因为你用不用对象的创建和空间的开辟都是那么多。这样的话ListView复用出现的问题也就不存在了。然而很多应用展示的条目并不是那一两条数据,而是很多会多余一屏的显示,不然也就不会有加载更多的出现了。如果我们不
本人原创!解决安卓ListView复用问题最简单的两种方法。
ListView在安卓很多地方需要用得到,其实listview是基于MVC架构设计的,即数据model,视图view和控制器controller。安卓已帮我们写好该框架,我们只需往里面塞数据就行。对于一些简单的listview,我们常用arrayadapter来作为适配器,但这往往不能达到我们想要的结果,为了界面的功能和美观,我们往往需要自定义适配器。而适配器的基类baseadapter安卓已帮我
Android Listview加载不同布局,ViewHolder类型转换异常!!!
ListView加载不同布局时,需要注意的是,不仅要重写getItemViewType()这个方法,还需要重写getViewTypeCount()方法,因为后者默认返回值为1,若补充些此方法,加载多种布局的时候就会爆出ViewHolder类型转换异常!切记
android listview加载不同布局及注意事项
这里介绍两种不同,第一种只是item布局不同,但是控件都是一样的。第二种则是布局和控件都不相同。第一种:布局不同,控件相同 首先我们先创建两个布局,一个是listview_record_a,一个是listview_record_b,下面是各自的代码listview_record_a<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:
android中listView如何复用多种布局
-
BaseAdapter-ListView中的item显示多种布局
想要在listview中的item添加多中布局主要是加多两个方法: public int getItemViewType(int position){ return position; } public int getViewTypeCount(int position){ return position; } 演示图片: 不要吐槽效果只是演示一下如何实现的,嗯!
Android中ListView适配器中的view重用和接口回调
效果图: 项目结构: MainActivity中: package com.example.zhh.myapplicationinterface; import android.app.Activity; import android.os.Handler; import android.os.Message; import android.support.v7.app
listView 添加多个不同的adapter。
有时候我们想在listView上分类,或者呢 有时候一行显示两列内容,有时候需要三列内容 ,那怎么实现呢,这里呢就要使用 class Section { String caption; Adapter adapter; Section(String caption, Adapter adapter) { this.caption=caption; thi...
android app -- 关于listview的不复用,解决item状态改变的问题
我们在平常的开发中使用listView基本上都是复用使用,但是也有一些特殊情况时不能在使用复用例如listView中的每一项都能操作(比如有个editText输入内容,上下滑动之后,看输入框里面的内容是不是要被改变,或者在下面复用的时候出现了这个输入框里面的内容。比如,一个单选框,这一项选中之后,上下滑动之后,看这个选中状态是不是乱跑了,之前的选中状态是不是消失了。还有每个item都有一个加载动画...
Android让多类型Adapter从此变的简单
     如果能够以最少的代码实现功能,那简直是程序员的福音,对于列表,每次如果都要写一次Adapter,然后在写一个ViewHolder是不是很烦,是不是很累,那我们就站在前人的肩膀上撸一发。      就拿ReCycleView.Adapter来说,如果是多种类型,有两个方法是我们最烦的,getItemViewType和onBindViewHolder,因为这两个方法我们不得不去switch,...
通过getChildAt方法取得AdapterView中第n个Item(重新编辑)
以前对于AdapterView(ListView和GridView的父类)以及这个类的getChildAt()方法理解十分粗浅,以为是指传入一个绝对position(就是这个item是AdapterView第几个元素)来直接获得到该item,当然,android SDK中对于该方法也没有很具体的说明。这个理解是错误的。以简单的listview为例先说下listview对于item的复用,一个元素很多
Android 中listView的多个Item复用问题
最近接触到了listView中多个Item复用的问题。listView使我们Android开发中非常常见的一个控件,可以说任何一款应用都会使用到他,所有呢,这个控件也被别人研究的比较多。常用的一般复用方法,大家应该都清楚。convertView的复用,使用ViewHolder,使用LruCache,异步加载等等。这里就是记录我开发当中遇到的listView的多个item复用的方法和一些处理的坑。。
Android ListView适配器Adapter的使用,item的复用和ViewHolder优化
概述 数据适配器:由于数据源的多样性及ListView的固定数据格式,需要使用Adapter建立数据源和ListView的动态适配关系。Adapter解耦了数据的来源和显示,降低了程序的耦合性,使之更易扩展。 ListView的缓存机制:如需同时显示5条数据,滑动时最多会同时显示6条数据,因此系统将加载6个item布局。当向上滑动至第一个item不可见时,该item则进入缓存池。当第7
Android ListView复用机制详解
最近用到RecyclerView,想研究RecyclerView和ListView复用机制的区别,这篇文章以解析源码的方式解析ListView复用机制的原理。 ListView复用是通过AbsListView的RecycleBin内部类来实现的,源码注释如下: /** * The RecycleBin facilitates reuse of views across l
Android listview 一个item加载多个布局
由于项目需要,有个页面里面的内容需要用Listview显示,但是每个item里面又有像listview那样的内容显示。所以网上查了很多资料,有说用Listview嵌套Listview做,也有我们说的这种,加载多个布局。这里实现的listview类似淘宝订单那种。每个item里面有小的item个数不确定。可以使用listview嵌套listview那样做,但是可能会有问题。所以用这种加载不同布局来做...
android listview单个item刷新某个控件
Logger.i(TAG, "更新加载图片的位置==" + position);               View childAt = fl_pp_lv.getChildAt(position - fl_pp_lv.getFirstVisiblePosition() + 1);               if (childAt != null) {
Android ListView使用不同对象加载不同布局
因为未知原因,突然想到了关于一个 List 集合里面能否添加不同对象的问题,因为我们平时开发过程中,关于List 的比较常规的写法就是:List<XXX> list = new ArrayList<XXX>();这让我形成了一种 List 里面就只能添加一种类型的对象的潜在想法(或许是 Java 基础不够扎实)。 所以,我这里用代码确定一下,List 不给定泛型,然后迭代添加两种不同的对象,最后再
ListView的Adapter有多个ViewHolder的时候导致的ViewHolder类型转换错误!
问题复现 背景是这样的,我用的CursorAdapter,然后重写了getViewTypeCount方法 @Override public int getViewTypeCount() { return TYPE_COUNT; } 我又自己实现了一个getItemViewType方法 public int getItemViewType(Cursor
Android Listview加载不同布局,ViewHolder类型转换异常
注意一: 要重写getItemViewType(int position)和getViewTypeCount() 注意二: getItemViewType(int position) 这里的position一定要传数据源的position,而不是自己在数据源里定义了一个类型,用数据源的类型值来区别ItemType这里是错误的,一定要传的是数据源的positon,也就是要和getView(in...
android关于ListView加载时使用多种不同xml的Item的实现
1、主要使用到了BaseAdapter中的方法 @Override public int getItemViewType(int position) { int isRoot = Integer.parseInt(listData.get(position).get(&quot;isRoot&quot;)); if (isRoot == 1) { ret...
给Recyclerview的item设置不同布局的Adapter
给Recycleview的item设置不同布局的Adapterrecyclerview是android5.0后出的一种全新的控件,可以用来代替原始的listview,gridview等,recyclerview具体的使用方法请移步—— [ Hongyang ]第一次写博客,也不知道在写什么了,请多多包涵,不废话了,直接上代码了哦package com.mosl.commonrecyclerview
RecyclerView和ListView的复用BUG以及解决办法
RecyclerView和ListView的复用BUG BUG出现的场景举例 简单的介绍复用机制 复用机制BUG的解决方式 BUG出现场景举例 当想实现listview的多选情况时,滑动出现,chekbox错乱,也就是没有选中的被选中了 当listview想要实现点击变色实现阅读过标记变色时,滑动后出现未阅读的也变色了 复用机制的简单介绍 当listView每要展示一个item的时候就会向ada
实现类似listView中动态添加Item的功能
实现类似listView中动态添加Item的功能功能描述每个Item中包含EditText,具体有多少个Item也不定,用户可以添加和删除,然后再保存用户输入的值。 本人愚钝,用listview无法实现 ,但后来发现其实也不需要,可能描述不准确,网上也没搜到相关的功能。搜索的关键词也很重要啊。实现其实挺简单,只是当时对android view 的方法不熟,其实就是在一个viewGroup中
Listview中动态添加另外一种布局
listview在现有数据中动态添加另外一种布局,通过getViewType区分开position。根据返回的值,加载不同的布局,实现两种布局。注意getcout等于源数据集合中的总数加上插入的新数据的数量。
解决ListView的item监听事件个子控件监听事件冲突问题
当我们自定义ListView的Adaper的时候,给我们item布局添加监听事件,然后我再在去在Activity中给我们的ListView添加AdapterView.OnItemClickListener()的监听事件的时候,我们会发现,我们只能检测到我们子控件的监听事件,而不能都对我们的item进行监听了。这是因为我们在Activity中添加了button和checkbox这些控件,此时这些子控件
安卓listview照片重复显示解决办法
类似游戏资讯的一个小项目效果图:listview页面点击listview页面的item进入详细页面1----------首先粘贴异步请求图片并处理的类  AsyncImageLoader类public class AsyncImageLoader { private HashMap&amp;lt;String, SoftReference&amp;lt;Drawable&amp;gt;&amp;gt; imageCache; ...
android listview复用机制原理
最近换工作了,有了些时间,我也来写博客啦!  listview我们都知道用ViewHolder来实现它的复用机制,那它的原理是什么呢?   listview继承于AbsListview,它的具体实现是:   1. AbsListview中有两个view,activeview和scrapview;   2. activeview表示显示数据,如果设置了tag后,显示的数据会存放到s
listview中给每个item添加点击事件
给listview每个item添加点击事件,这个听起来好像挺迷糊的,在adapter里面我直接就写startactivity后来没成功,为此研究了几分钟发现有三种方式实现哈。现在说一下我的解决方法。1、在activity里面写adapter 这样点击事件直接解决, holder.btnStartrequest.setOnClickListener(new View.OnClickListener
Android性能:经典ListView适配器convertView缓存及复用机制
Android性能:经典ListView适配器convertView缓存及复用机制 Android中的ListView常用Adapter中都会涉及到convertView的使用,使用convertView主要是为了缓存试图View,用以增加ListView的item view加载效...
ListView的Item上的按钮点击事件,接口回调
当在使用ListView(或者GridView,其他类似)的时候,item的点击和item上其他控件的点击,有冲突的时候, 我们可以在适配器里对item上的其他控件进行监听事件的处理 但是有时候,需求不同,可能还有其他的小问题,接下来说一个例子 假设,MainActivity上有一个ListView,ListView的Item有文本,有按钮 点击按钮的时候,需要弹出MainActi
(listview局部更新)在activity中获取listview的item子项view
public View getViewByPosition(int pos, ListView listView) { final int firstListItemPosition = listView.getFirstVisiblePosition(); final int lastListItemPosition = firstListItemPosition + listV
Android ListView 自定义ITEM 为 进度条 按钮,进度条实时刷新
昨天要做一个MP3 多任务下载的下载管理功能,要把每个下载任务放到一个ITEM中,下载所以就会有进度条,为了可以手动开始暂停等操作,又在进度条下面增加了一个按钮,默认下载任务全部从数据库中读取,点击一个按钮,就开始一个下载任务,进度条实时更新。 download.xml ?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; ...
相关热词 c#异步发送kafka c#窗体编号 c# 操作二进制文件 c# 反射 机制 c#线程 窗体失去响应 c#角度转弧度 c# 解析gps数据 c# vs设置 语法版本 c# json含回车 c#多线程demo