今天玩着自己写的android程序,滑来滑去发现有一些图片的存放顺序出错了,本以为是viewholder出问题,后来发现这是android上常见的问题:
由于GirdView、ListView、RecyclerView等的复用机制,导致快速滑动引起的图片乱序。
其实不仅是图片,视频,checkbox等放入item,在快速滑动都会出现乱序的现象。
办法一:
在adapter的onCreateViewHolder()方法里面加入:holder.setIsRecyclable(false).
简单粗暴的方法,既然是复用机制导致的问题,那么我们就关闭复用。代价是在item到达一定数量之后(不同设备不一样),性能有所下降。
办法二(待改进):
本着不重复制造轮子的概念,这一次我从网上找了找解决方案。网友推荐使用facebook的fresco项目。
加入项目:
allprojects {
repositories {
jcenter()
mavenCentral()
}
}
dependencies {
...
compile 'com.facebook.fresco:fresco:0.9.0+'
...
}
构建之后即可使用。
引入命名空间
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
控件:
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/picSDV"
android:layout_width="200dp"
android:layout_height="200dp"
android:visibility="gone"
fresco:placeholderImage="@drawable/ic_menu_camera"
/>
在相应的activity中
setContentView(R.layout.activity_navigation);
Fresco.initialize(getApplicationContext());
但是:我的问题并没有解决。虽然官方文档说明了会自己管理图片内存,但是我这李还是出现图片错乱。或许官方解释的并不是我所遇见的问题。