首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android listView异步下载和convertView复用产生的错位问题

比如ListView滑动到第2行会异步加载某个图片,但是加载很慢,加载过程中ListView已经滑动到了第14行,且滑动过程中该图片加载结束。...获取滑入屏幕的行item之前会先判断缓存中是否有可用的item,如果有,做为convertView参数传递给adapter的getView。...这样,如下的getView写法就可以充分利用缓存大大提升ListView的性能。即便上万个行item,最多inflate的次数为n, n为一屏最多显示ListView 行item的个数。...比如ListView滑动到第2行会异步加载某个图片,但是加载很慢,加载过程中listView已经滑动到了第14行,且滑动过程中该图片加载结束, 第2行已不在屏幕内,根据上面介绍的缓存原理,第2行的view...比如ListView滑动到第2行会异步加载某个图片,但是加载很慢,加载过程中listView已经滑动到了第14行,第2行已不在屏幕内,根据上面介绍的缓存原理,第2行的view可能被第14行复用,第14行显示了第

1.3K70
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ListView优化和列表首尾使用

    我们可以看到getView()方法中传入了一个参数convertView,可以验证该convertView的值有时候是null,有时候又不是null,特别是当用户滚动ListView的时候。...其实Recyler可以理解为就是一个队列,用来存储不在屏幕范围内的item,如果item完全滚粗屏幕范围,那么该item就保存在队列中;如果新的item要滚动出来,那么就会首先查看Recyler是否含有可以重复使用的...其实Recycler缓存的item就是getView()方法中的参数convertView。所以会发现convertView有时候为null,有时候不为null。...; } } 经过这样的改造后,getView()方法首先检查convertView是否为空,如果是则新装填一个列表项组件,否则就重用它,就可以避免多余的装载导致的内存开销。...当convertView 为空的时候,装填一个列表项组件,并同时创建相应的ViewHolder对象;当convertView 不为空,只需要从其中取出ViewHolder对象,即可轻松给子组件填充内容。

    1.5K80

    —ListView+GirdView合集

    GridView 在二维滚动网格中显示项目的视图,它的继承属性与 ListView相似,并且 GridView的用法很多,主要凸显的是网格式布局,既有横向也有纵向的数据显示。...android:footerDividersEnabled:当设置为false时, ListView不会在每个页脚视图之前绘制分隔符。...android:headerDividersEnabled:当设置为false时, ListView不会在每个标题视图之后绘制分隔符。...判断 convertView,为空则创建,并设置tag,否则通过tag来取出 ViewHolder 给 ViewHolder中的控件设置数据 最终效果如下: ?...嘿嘿,这里就有个问题当 ScrollView嵌套 GridView或 ListView一起用的时候会冲突,你会发现 ListView始终显示的是第一个 Item而其他的 item不见了,其实不是其他的

    1.9K20

    ListView使用技巧-更新中

    虽然在Android5.X中,RecyclerView在很多地方组件取代了ListView,但是ListView的使用依然是分广泛。 本博文将对以下两方面的内容进行介绍 1....使用ViewHoder的步骤: 1. 在自定义的Adapter中定义一个内部类ViewHolder,并将Item布局中的控件作为成员变量 2....当convertView不为空的时候,直接取出来即可 */ public class ViewHolder { public TextView idtvcontent;...当然,分隔线不仅仅可以设置为一个颜色,也可以设置为图片资源,分隔线的使用代码如下: android:divider="@android:color/holo_green_light"...遍历ListView中所有的Item ListView作为一个ViewGroup,为我们提供了操作子View的各种方法,最常见的就是通过getChildAt()来获取第i个子View,代码如下:

    95530

    as3中ProgressEvent的bytesTotal始终为0

    遇到很奇怪的问题,as3中监听资源下载的PROGRESS事件(ProgressEvent.PROGRESS),它的bytesLoaded属性倒是正常的,但bytesTotal属性却始终为0,结果是导致了得到的下载比率为无穷大...(Infinity) evt.bytesLoaded / evt.bytesTotal  evt.bytesLoaded  / 0 在网上搜索了一下,有以下三种情况导致bytesTotal始终为...0: 1、如果将进度事件调度/附加到某个 Socket 对象,则 bytesTotal 将始终为 0,参考ProgressEvent的事件对象>> 2、从php里动态加载内容导致的bytesLoaded...始终为0,解决方案>> 3、web服务器开启gzip导致的,参考地址>> 因开发环境是在Windows下,而web服务器使用的是nginx,然后查看了一下nginx.conf的配置,发现gzip是开启的...我用httpwatch抓取swf的下载,发现其http header在gzip开启的情况下还是有的,这种现象很难解释了,gzip对swf的加载起到了什么影响?

    89510

    android读取sqlite数据库的数据并用listview显示

    数据库的数据并用listview显示 刚刚接触android,老师给了我了几个班级信息的excel,让我做一个考勤的系统出来,本篇仅记录了真机调试下,读取已有静态数据库并显示在listview中。...实际上Android为你缓存了视图,Android中有个叫做Recycler的构件,下图是他的工作原理 如果你有10亿个项目(item),其中只有可见的项目存在内存中,其他的在Recycler中。...ListView先请求一个type1视图(getView)然后请求其他可见的项目。convertView在getView中是空(null)的。...当item1滚出屏幕,并且一个新的项目从屏幕低端上来时,ListView再请求一个type1视图。convertView此时不是空值了,它的值是item1。..., ViewGroup parent) { View view ; /**对ListView的优化,convertView为空时,创建一个新视图

    2.4K20

    listview加载性能优化之view的复用

    在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候,会占据大量内存...一般我们都会给listview set一个adapter ,然后adapter里面初始化的方法就是 getview(),这个方法 简单说是这个意思,就是 你的listview有多少行,或者说count值是多少...,他就会走多少次getview().所以 优化listview的加载速度就要让convertView匹配列表类型,并最大程度上的重新使用convertView。...mIcon1 : mIcon2); return item; } 正确的加载方式是当convertView不为空的时候直接重新使用convertView从而减少了很多不必要的View的创建,然后加载数据...mIcon1 : mIcon2); return convertView; } 最快的方式是定义一个ViewHolder,将convetView的tag设置为ViewHolder,不为空时重新使用即可

    36130

    android学习笔记----ListView和各种适配器简介

    ArrayAdapter用法: 简单来讲一下ListView和ArrayAdapter: 我们可以将 ListView 看成由 ArrayAdapter 提供支持,没有该适配器的话 ListView 就是个空的容器...重复使用它们,ListView 将请求列表中特定位置的视图,同时传入之前用过的视图。...你看过 Android 中的下拉菜单吗?在 Android 中,这些叫做 Spinner,你猜怎么着?...要填充下拉菜单中的每项,我们为其关联了一个适配器,菜单中的每项都来自数据来源中的某项,可以看出,当你构建 Android 应用时,就会遇到适配器模式。...当convertView为null的时候,创建一个ViewHolder对象,并将控件的实例都存放在ViewHolder里,然后调用View的setTag方法,将ViewHolder对象存储在View中,

    2.2K10

    Andorid-ListView简单使用以及BaseAdapter入门

    另外,也是为下面的属性验证做准备~ ---- 2.表头表尾分割线的设置: listview作为一个列表控件,他和普通的列表一样,可以自己设置表头与表尾: 以及分割线,可供我们设置的属性如下: footerDividersEnabled...也正是在这个过程中完成了适配器的主要转换功能,把数据和资源以开发者想要的效果显示出来。也正是getView的重复调用,使得ListView的使用更为简单和灵活。  ...).show(); 如果你在app中点击某一行的item直接会造成程序闪退,并在Android Studio上抛出空指针异常: ?...简单地说,Android允许将一个long类型的数据附加到任何ListView对象的元素上,对,这是附加的,实际上你可以选择忽略此值。...这样的写法已经成为了Android世界中的一个通常的做法(惯例)。

    1.4K20

    Android listView中的button点击事件

    大家好,又见面了,我是你们的朋友全栈君。 如果listView中的item有button控件,那么如何获取listView中的button控件?...在listview中的listitem设置事件响应,如果listitem中有button控件,这时候listitem就不会捕获到点击事件,而默认的是listitem中的button会捕获点击事件。...要想在点击item时生效,只需要设置button的非高亮就可以了,如下: android:focusable="false" 或者设置listview高亮,如下: myListView.setFocusable...所在Item中的位置,通过这个位置就可以得到Item中的值。...:android中在Activity中响应ListView内部按钮的点击事件的两种方法_今人不见古时月,今月曾经照古人的博客-CSDN博客 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn

    2.3K10

    Adapter与ListView的简单应用(下)Android应用界面开发

    ListView01 自己思考后,画了2张图,原创的! 其实,在数据源中每一个object(包含各种Java类),在ListView中对应着每一个item(列表中的每一个横行) ?...ListView02 而Java类中的对应的变量,则可以一 一对应与item布局文件中的各个属性。 来,编代码,存在一个Data类,表示每一个Item包含的内容。...== null){ //如果view未被创建过,且缓存为空 mViewHolder = new ViewHolder(); convertView= LayoutInflater.from(getContext...找到其中的控件 convertView.setTag(mViewHolder); //将ViewHolder类存储到已经实例化的convertView中 }else { //如果convertView...,我只是在工程目录下放置了一些图片,用于listview中显示,当然Data类与list_layout中的控件是一一对应的,可以添加其它两边都可适配的各类控件及属性。

    63520

    13.Android-ListView使用、BaseAdapterArrayAdapterSimpleAdapter适配器使用

    1.ListView ListView 是 Android 系统为我们提供的一种列表显示的一种控件,使用它可以用来显示我们常见的列表形式。继承自抽象类 AdapterView。继承图如下所示: ?...里面的每个好友就是由一个个 item 组成的,而每个item都存在Adapter适配器类中(负责数据处理),然后通过ListView显示出来. 2.ListView显示原理 ListView显示数据原理实际就是...适配器 BaseAdapter比较简单,主要是通过继承此类来实现BaseAdapter的四个方法: public int getCount(); //设置适配器中数据集的数据个数(ListView要显示的所有数据行...// position:表示当前获取的Item是哪一行,开头从0开始 // convertView:旧视图复用,如果convertView不为空则表示可以用来复用.无需再次new一个view来使用. /...为空则需要重新创建资源视图,如果不为空则表示可以用来复用.无需再次new一个view来使用.

    2K20

    【译】在列表视图中处理空值

    小鄧子 状态: 完成 如何在ListView中处理空值 本篇文章主要针对两类开发者。...我们将在SimpleImageListAdapter类中进行演示,你应该已经在ListView blog post of this Picasso series中略微的了解过了。...由于ListView中的ImageView是通过系统的调度来实现复用的,所以当用户快速滚动时可能出现图片错乱的现象,而这样做能够有效避免当前Item拿到了先前的图像,而造成图像显示不准确的情况发生。...; } 我们通过检查图像URL是否为null的方式对getView()做出了修改。...现在,我们算是激活了“可选择性置空ImageView”的方案。 总的来说,这里已经给了你足够的信息,用来处理ListView中可能出现空加载路径的情况。如果你有任何疑问,请在下方评论。

    1.2K30

    Android精通之AsyncTask与ListView讲解

    标题图 AsyncTask 了解AsyncTask异步,需要了解一下异步任务(多线程),什么是线程,可以这么说线程好比边吃饭边看电视,AsyncTask是为了方便后台线程中操作更新UI,本质为Handler...,Progress为进度,为返回结果 } 在这里继承,实现的方法有 //在异步任务之前 @Override protected void onPreExecute() { super.onPreExecute...... strings){ } 执行前 @Override protected void onpreExecute(){ super.onPreExecute(); //解决UI问题 } 执行中的代码...为数组 @Override protected Boolean doInBackground(String... strings) { //预防为空 if (strings !...:name="android.permission.READ_EXTERNAL_STORAGE"/> ListView ListView是我们在Android开发中常用到的一个控件,用来展示数据,我们在微信列表项

    49030
    领券