adapter 中使用 getItemViewType 遇到的问题

ListView加载不同Item布局的问题 ListView加载不同的Item,实现聊天界面 阅读详情

工作中遇到在adapter  中显示2种类型的样式,需要在adapter 种重写 getItemViewType,和  getViewTypeCount 这两个方法,之前在用的时候没有太注意,在重写getItemViewType 的时候对于不同的ViewType 返回 1和2 ,后来老是奔溃,进去看源码,源码对这个方法的注释为:

/**

 * Get the type of View that will be created by {@link #getView} for the specified item.
 * 
 * @param position The position of the item within the adapter's data set whose view type we
 *        want.
 * @return An integer representing the type of View. Two views should share the same type if one
 *         can be converted to the other in {@link #getView}. Note: Integers must be in the
 *         range 0 to {@link #getViewTypeCount} - 1. {@link #IGNORE_ITEM_VIEW_TYPE} can
 *         also be returned.
 * @see #IGNORE_ITEM_VIEW_TYPE
 */

这里明确指出 返回的值一定要从0 到 getViewTypeCount -1,可以看出,这个地方gitItemViewType 返回的值不是随便乱设置的。android 源码是这么用,


/**
 * @return A view from the ScrapViews collection. These are unordered.
 */
View getScrapView(int position) {
    final int whichScrap = mAdapter.getItemViewType(position);
    if (whichScrap < 0) { 
        return null;
    }
    if (mViewTypeCount == 1) {
        return retrieveFromScrap(mCurrentScrap, position);
    } else if (whichScrap < mScrapViews.length) {
        return retrieveFromScrap(mScrapViews[whichScrap], position);
    }
    return null;
}

这里是itemViewType() 是mScrapViews 中的index, 难怪当我们把  getItemViewType 设置成1,2 的时候,会出现indexOutIndexException 这个错误,对于mScrapViews  

从scrapView中获取相应类型的view,这个数组是在RecycleBin中,这个RecycleBin 的主要功能是为了更方便的复用view,他有两个层级,分别是ActiveViews和ScrapViews。ActiveViews是当前展示在屏幕上的 layout,但是最终所有的views 都将降级为ScrapViews。 ScrapViews  是被回收掉的不在屏幕展示的view, 他为了避免adapter 重新创建view。


Android ListView使用不同对象加载不同布局 因为未知原因,突然想到了关于一个 List 集合里面能否添加不同对象的问题,因为我们平时开发过程中,关于List 的比较常规的写法就是:List<XXX> list = new ArrayList<XXX>();这让我形成了一种 List 里面就只能添加一种类型的对象的潜在想法(或许是 Java 基础不够扎实)。 所以,我这里用代码确定一下,List 不给定泛型,然后迭代添加两种不同的对象,最后再 阅读详情

相关推荐

保姆级教程:用STM32标准库搞定TIM1的PWM输出(附完整代码和避坑点)

本文提供STM32F103高级定时器TIM1的PWM输出保姆级教程,涵盖从工程搭建到完整代码实现的详细步骤。重点解析TIM1作为高级定时器的特殊配置要点,包括时钟初始化、PWM通道设置和GPIO复用功能,并附常见问题排查指南和动态调整占空比的实用技巧,帮助开发者高效实现精准PWM控制。

weixin_30673611的博客 433

ListView多条目简单使用以及会遇到的错误

ListView的多条目展示,需要手动重写2个方法:getItemViewType和getViewTypeCount()方法. getItemViewType是获取具体的某个索引值下的条目的类型, @Override public int getItemViewType(int position) { if(position % 2 ==0){ return TYPE1; }else{ retur...

jiahui6666的博客 228

WinCC7.5SP2生成PDF报表显示有错误或残缺的问题及解决方法

WinCC V7.5 SP2 自带的生成PDF报表功能异常。生成的PDF报表内容显示空白或有残缺。经测试后发现可以通过替换Adobe PDF Library库文件的方法解决该问题。

commandboy的博客 3659

android Adapter.getItemViewType()使用不当会导致AdapterView无法刷新

Adapter.getItemViewType(),配合 Adapter.getViewTypeCount() 使用,是用来实现在一个ListView上呈现不同的item样式。如果使用不当,会导致无法刷新AdapterView。

frained的专栏 1282

DLMS-Blue-Book蓝皮书—曲线类

attribute_index 1 指的是第 1 个属性(即 logical_name),attribute_index 2 指的是第 2 个属性,等等;如果其他“曲线通用类”对象捕获了这个缓冲区,它们的缓冲区也将被清空,以保证它们的缓冲区条目是同质的。如果捕获对象是曲线通用类的缓冲区,则 data_index 标识缓冲区(即列)中的捕获对象(即内部曲线通用类中的列);如果曲线通用类已排序,则调用捕获方法将把新条目存储在缓冲区中的适当位置,移动所有后续条目,并可能丢失最不相关的条目。

一个bug是bug,多个bug能work 1452

Proteus下载安装快速入门:30分钟掌握全过程

手把手教你完成proteus下载安装,从环境配置到首次运行一气呵成,适合电子设计新手快速掌握仿真工具的核心操作步骤。

weixin_31974443的博客 891

RecylcerView getItemViewType position一直是0

记录一下: https://blog.youkuaiyun.com/qq_26075861/article/details/86685293 在RecyclerView外层套上一层RelativeLayout即可 https://blog.youkuaiyun.com/Moonlighting_/article/details/52385267 @Override protected void onMeasure(int widthSpec, int heightSpec) { int expandSpec = MeasureSp

jzlhll123的专栏 643

文石NoteX3国行版安装 Google Play经验分享

文石NoteX3国行版安装 Google Play经验分享。

2301_80693261的博客 7596

[Android] ListView中getView的原理+如何在ListView中放置多个item

ListView 和 Adapter 的基础 工作原理: ListView 针对List中每个item,要求 adapter “给我一个视图” (getView)。 一个新的视图被返回并显示 如果我们有上亿个项目要显示怎么办?为每个项目创建一个新视图?NO!这不可能! 实际上Android为你缓存了视图。 Android中有个叫做Recycler的构件,下图是他的工作原理: ...

weixin_33976072的博客 372

人工智能---什么是Transformer?

Transformer是一种强大的神经网络架构,最初由Google的研究人员在论文《Attention is All You Need》中提出,用于自然语言处理任务,特别是在机器翻译方面取得了巨大成功。Transformer的核心思想是完全基于自注意力机制(self-attention mechanism)来实现序列到序列(sequence-to-sequence)的学习。它在自然语言处理(NLP)和其他序列到序列任务中表现出色,逐渐成为该领域的主流模型。近些年也逐渐在自动驾驶领域有所应用。

智能汽车人的博客 3955

17、高通8155座舱平台--QNX开发基础

我个人习惯,拿到一个新板子,第一件事就是打开IDE,建一个空的QNX项目,然后跑一遍Hello World。比如,当触摸屏被按下时,驱动发一个脉冲给UI进程,告诉它“嘿,有人摸屏幕了”。我在8155上调试时,就遇到过因为脉冲优先级太低,导致触摸响应延迟的问题。IDE自带的编译器是qcc,它其实是gcc的封装。QNX的IPC机制,可以说是它最牛的地方。嗯,这套流程走下来,你对QNX开发的基本功就差不多了。QNX默认的消息缓冲区大小是64KB,如果你要传大块数据,比如音频流,那就得用共享内存了。

woailuojp的博客 50

【android学习笔记】自定义Adapter继承BaseAdapter获取不到getview或者getview不执行的问题

listView在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得到 listView的长度,然后根据这个长度,调用getView()逐一绘制每一行。如果你的 getCount()返回值是0的话,列表将不显示同样return 1,就只显示一行。系统显示列表时,首先实例化一个适配器(这里将实例化自定义的适配器)。当手动完成适配时,必须手动映射数据,这需要重写getView()方

6986

超临界二氧化碳再热再压缩布雷顿循环建模与先进控制

超临界二氧化碳布雷顿循环建模与先进控制研究 本文研究了超临界二氧化碳再热再压缩布雷顿循环系统的建模与控制。通过MATLAB/Simscape构建了包含压缩机、透平、回热器等关键组件的动态模型,并设计了基于模型预测控制(MPC)和自抗扰控制(ADRC)的多层控制策略。系统采用转速控制的压缩机、阀门开度控制的透平,以及可变热源加热器,实现了全动态分析。研究结果表明,MPC与ADRC混合控制方案相较于传统PID控制,功率超调降低至0.9%,效率波动控制在±0.08%,扰动恢复时间缩短至12秒。

AI的内部世界的博客 340

android adapter getItemViewType, getViewTypeCount 越界问题

默认是 getItemViewType return 0;  count

zgf1991 IT新人 3935

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Recyclerview瀑布流上下滑动的时候item位置错乱,闪烁,item间距错乱问题解决方法

之前要做一个瀑布流效果 需要动态设置图片的高度 按照普通的recyclerview设置瀑布流的操作来写 结果出现一个现象:向下滑动超出一屏的距离再滑动回顶部的时候 出现Item错位,间距消失等问题 (注:截图没体现出瀑布流效果是因为这几张图片的高度一样) 先贴效果图和有问题的代码 效果图: 有问题的代码: private void initRecyclerview() {...

ulddfhv的专栏 5442

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

RecyclerView ItemTouchHelper 的使用和遇到的问题

1.相信RecyclerViewItemTouchHelper接触过的都知道,它的主要作用是对item进行拖拽重新排序,或滑动删除,如图:https://images2015.cnblogs.com/blog/824232/201703/824232-20170313114715120-1816490674.gif 这里了主要记录遇到的一个坑,就是每次只能拖拽一次,不能连续的拖拽。研究到...

wangpingtaohn的博客 1050

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

notifyItemRemoved的使用

日常bug记录 问题出在列表单个Item删除时出现的 首先,咱用的是IRecyclerView,其次是分页加载,然后就是重点了: 我删除item到第七个时崩溃了,why?带着疑惑去调试了一波,发现原来使用的notifyItemChange()方法不好用,移除的和刷新出来的数据不对,然后调整为notifyItemRemove()方法,发现好用多了,使用代码如下 //index为当前选中的item的位置position mDatas.remove(index); notifyItemRemoved(inde

Dota_wy的博客 3495

ListView自定义Adapter中getView(int position, View convertView, ViewGroup parent) 使用

ListView自定义Adapter中getView(int position, View convertView, ViewGroup parent) 使用

人工智能 6593

对scrollview嵌套listview说不(一)

转载请指明出处:http://blog.youkuaiyun.com/u010339039/article/details/49838665 今年刚毕业然后就和同学来到了深圳。平时工作也不是很累,偶尔还挺闲。就像找点什么事来做。又没有其他什么技能,就想到来自己写写技术博客,小弟才疏学浅,如果写的如果有问题,希望大家指出。一.概述以前写类似这样的界面的时候总是先想到的是使用scrollview嵌套一个list

mr_x的博客 3125

ArrayIndexOutOfBoundsException listview 不同视图问题

使用adapter的时候 返回ArrayIndexOutOfBoundsException length=2错误  private static final int TYPE_SIGLE = 1;//单品视图 private static final int TYPE_SUIT = 2;//套装视图 @Override public int getItemViewType(in

u012106080的博客 425

RecyclerView下拉刷新和加载更多后数据混乱问题

RecyclerView下拉刷新和加载更多后数据混乱问题 Adapter里面复写recyclerview的getItemViewType方法: @Override public int getItemViewType(int position) { return position; } ...

lqy1134031515的博客 1481

RecyclerView 的使用

RecyclerView 的使用

minusn的博客 2789

Android-71-解决报错: java.lang.ArrayIndexOutOfBoundsException: length=2; index=2

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.ieslab.activity, PID: 10681 java.lang.ArrayIndexOutOfBoundsException: length=2; index=2 at android.widget.AbsListView$RecycleBin.addScrapView(Abs

IOT_LI的专栏 6554

RecycleView 刷新显示错乱(刷新之后上一个界面的显示还在,出现部分错乱)

今天使用RecycleView 来实现来展示一个列表,突然发现刷新的时候上一个列表的显示还在,看了打印数据已经更新了,只是有一些项的显示还没有更新,还保存着上一个状态,于是就出现了数据错乱的现象,有一部分是更新之后的状态,一部分是更新之前的状态。有问题就是找度娘啊,经过一番百度解决了,下面是别人提供的几种方法。 (1)在绑定adapter给RecycleView之前,设定adapter的stableIds为true。 adapter.setHasStableIds(true); recycle...

qq_32390877的博客 1528

Android 重写BaseAdapter中的getView

一开始的设计是,一个ListView中最上面是一个EditText,下面全部是TextView,所以在getView代码如下: public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (position== 0) {//最上面为搜索

jy476232408的博客 392

RecyclerView多种item类型头部底部

RecyclerView添加自定义头部尾部及遇到了一些问题,先来看看实现后的效果

qq_31902733的博客 869
上一篇: android 开发中遇到的混淆的问题
下一篇: RN 环境配置
ahubenkui
博客等级 码龄16年 5粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值