ListView展示不同布局需要注意的地方

时间:2021-07-18 19:16:10

尊重劳动成果,转载请标明出处:http://www.cnblogs.com/tangZH/p/8419010.html

我们在项目中经常需在一个listview中展示不一样的布局,我们可以在adapter的getView()中根据position来决定该展示哪些布局。

我在项目中便是如此,第一个item是展示一张图片(判断当position==0的时候返回该图片),而当position不为0的时候返回我们需要的布局,如下:

 ViewHolder viewHolder = new ViewHolder();
if (view == null) {
view = mInflater.inflate(R.layout.listview_item, viewGroup, false);
viewHolder.textCate = view.findViewById(R.id.discover_text_category);
viewHolder.textView = view.findViewById(R.id.discover_view_all);
viewHolder.arrow = view.findViewById(R.id.discover_arrow);
viewHolder.divider = view.findViewById(R.id.discover_item_divider);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
} //下面这里执行相应的操作,举一个例子
viewHolder.textCate.setText("A")
 

可是这时候问题来了,滑动到下面的时候报错:找不到组件textCate

苦思良久,最终我是这样分析的:

listView的item会复用,也就是滑动到下面的时候,下面的item会复用第一个item,也就是图片,然后代码在判断view == null的时候不成立,于是执行

viewHolder = (ViewHolder) view.getTag();

而我们没有给图片设置tag,取出来的当然为空,因此下面会报空指针。

有什么觉方法呢?

其实很简单,只要在判断view == null后面再加上一个判断就行了:

if (view == null || view.getTag() == null)

当view为null或者view取出来的tag也为null的时候,那就需要去重新加载布局,设置tag

ListView展示不同布局需要注意的地方的更多相关文章

  1. Xamarin.Android 调用Web Api(通过ListView展示远程获取的数据)

    xamarin.android如何调用sqlserver 数据库呢(或者其他的),很多新手都会有这个疑问.xamarin.android调用远程数据主要有两种方式: 在Android中保存数据或调用数 ...

  2. android 项目学习随笔十二(ListView加脚布局)

    1.ListView加脚布局 头布局initHeaderView,在onTouchEvent事件中进行显示隐藏头布局切换 脚布局initFooterView,实现接口OnScrollListener, ...

  3. ListView中嵌入布局的Button或多个点击事件

    有时候在ListView嵌入的布局中有多个事件需要点击,比如一个item中有TextView和Button两个布局,当我们需要获取这两个点击事件时,我们应该如何去获取呢,通常来说,我们都是已经固定好了 ...

  4. android listview展示图片

    最近学习android开发,感触颇多,和网站开发对比,还是有很大的差距,在这里记录一下. android listview展示图片 在网站开发上,展示图片非常简单,一个HTML img标签就搞定,加上 ...

  5. 仿喜马拉雅实现ListView添加头布局和脚布局

     ListView添加头布局和脚布局 之前学习喜马拉雅的时候做的一个小Demo,贴出来,供大家学习参考: 如果我们当前的页面有多个接口.多种布局的话,我们一般的选择无非就是1.多布局:2.各种复杂滑动 ...

  6. android 项目学习随笔九(ListView加头布局)

    1.缓冲背景色 <ListView android:id="@+id/lv_list" android:layout_width="match_parent&quo ...

  7. ListView的多布局中的小问题

    今天用到了ListView的多布局,我们需要额外重写两个方法 //返回多布局的个数 @Override public int getViewTypeCount() { return 3; } //用该 ...

  8. 解决viewpager&plus;多个fragment&plus;listview,listview展示内容高度不自适应出现多余空白问题

    一.重写viewpager import android.content.Context; import android.support.v4.view.ViewPager; import andro ...

  9. Android学习总结(十四) ———— ListView Item多布局的实现

    一.基本概念 实现一个Item的多布局.像我们经常在用的各种即时通讯工具,QQ.微信等,假设他们的会话界面是ListView实现的,那么ListView就有多种Item布局,要实现ListView里面 ...

随机推荐

  1. ng-repeat循环出来的部分调用同一个函数并且实现每个模块之间不能相互干扰

    使用场景:用ng-repeat几个部分,每个部分调用同一个函数,但是每个模块之间的功能不能相互干扰 问题:在用repeat实现.content块repeat的时候打算这样做:新建一个空的数组(nmbe ...

  2. SVN冲突

    svn冲突,导致工程打不开,报错:xxx..xcodeproj  cannot be opened because the project file cannot be parsed. 解决方法:   ...

  3. js创建对象的6种方式

    一.工厂模式 function createStudent(name,age){ var o=new Object(); o.name=name; o.age=age; o.myName=functi ...

  4. sqlite数据库 select 查询带换行符数据

    在sqlite 数据库中用 select 语句查询带 换行符的 数据信息 实现 SELECT   * from questions_exec where title like     '%'||x'0 ...

  5. 【重走Android之路】【Java面向对象基础(三)】面向对象思想

    [重走Android之路][基础篇(三)][Java面向对象基础]面向对象思想   1 面向对象的WWH   1.1 What--什么是面向对象         首先,要理解“对象”.在Thinkin ...

  6. Android 画图类View与SurfaceView之学习

    在开发游戏开发中,android相应的提供了几个重要的模块: 1.显示界面的视图:  Android 提供 View 和 SurfaceView 2.控制游戏整体结构: android 提供 Acti ...

  7. Java编程思想读书笔记--第14章类型信息

    7.动态代理 代理是基本的设计模式之一,它是你为了提供额外的或不同的操作,而插入的用来代替“实际”对象的对象.这些操作通常涉及与“实际”对象的通信,因此代理通常充当着中间人的角色. 什么是代理模式? ...

  8. Phone List(字典树)

    Phone List Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 25709   Accepted: 7785 Descr ...

  9. 测试不同格式下depth buffer的精度

    这篇文章主要是参考MJP的“Attack of The Depth Buffer”,测试不同格式下depth buffer的精度. 测试的depth buffer包含两类: 一是非线性的depth b ...

  10. 最近很多人问我:saiku下载不下来

    saiku的前段团队 在UI设计方面很专业.但是兼容性差到让人无语.不知道为什么,是不是不给钱,人家故意黑它. 一直忙别的工作,现在整理一些saiku相关网站,百度不到的,google又要FQ.看个合 ...