Android-ListView即使在adapter';s getView方法
我正在尝试使用Listview/customadapter创建人员列表。行显示得相当快,但即使在速度相当快的设备上,滚动也非常慢。除了使用asynchtask之外,我尝试了一些建议,希望将其作为最后的手段,但似乎没有任何东西可以提高性能。最后,作为使用asynchtask之前的最后一步,我尝试删除适配器的getview方法中的所有处理。现在,它所做的只是从xml膨胀视图并显示空行。我注意到,即使这样,滚动速度也没有提高。所以我怀疑原因可能是我的布局结构。 我能做些什么改变来加快速度吗?任何帮助都将不胜感激。提前谢谢Android-ListView即使在adapter';s getView方法,android,performance,image,listview,Android,Performance,Image,Listview,我正在尝试使用Listview/customadapter创建人员列表。行显示得相当快,但即使在速度相当快的设备上,滚动也非常慢。除了使用asynchtask之外,我尝试了一些建议,希望将其作为最后的手段,但似乎没有任何东西可以提高性能。最后,作为使用asynchtask之前的最后一步,我尝试删除适配器的getview方法中的所有处理。现在,它所做的只是从xml膨胀视图并显示空行。我注意到,即使这样,滚动速度也没有提高。所以我怀疑原因可能是我的布局结构。 我能做些什么改变来加快速度吗?任何帮助都
<TextView android:id="@+id/mId" android:text="TextView"
android:layout_width="0px" android:layout_height="0px"></TextView>
<TextView android:id="@+id/phone" android:layout_height="0px"
android:layout_width="0px"></TextView>
<TextView android:id="@+id/email" android:layout_height="0px"
android:layout_width="0px"></TextView>
<ImageView android:id="@+id/imageView1" android:layout_width="match_parent"
android:layout_height="110dp" android:adjustViewBounds="true"
android:scaleType="fitXY" android:src="@drawable/bl_row_bg"></ImageView>
<TextView android:paddingTop="9.7dp" android:id="@+id/name"
android:paddingLeft="25.88dp" android:text="xxxx"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:textColor="@android:color/black" android:lines="1"
android:ellipsize="end" android:textStyle="bold"></TextView>
<ImageView android:src="@drawable/default_avatar" android:id="@+id/image1"
android:layout_height="110dp" android:layout_width="110dp"
android:scaleType="fitXY" android:paddingTop="6.47dp"
android:paddingBottom="6.47dp" android:paddingRight="6.47dp"
android:layout_alignParentRight="true"></ImageView>
<TextView android:id="@+id/txt1" android:paddingLeft="25.88dp"
android:text="Turning 24" android:layout_height="wrap_content"
android:layout_width="wrap_content" android:layout_below="@+id/name"
android:textColor="@android:color/black"></TextView>
<TextView android:id="@+id/txt2" android:paddingLeft="25.88dp"
android:text="23 Days to go" android:layout_height="wrap_content"
android:layout_width="wrap_content" android:layout_below="@+id/txt1"
android:textColor="@android:color/black"></TextView>
<ImageView android:layout_height="64.7dp" android:src="@drawable/ss_image2"
android:id="@+id/image2" android:layout_width="64.7dp"
android:scaleType="fitEnd" android:layout_alignBottom="@+id/imageView1"
android:layout_alignParentRight="true"></ImageView>
<ImageView android:src="@drawable/bl_date_background"
android:id="@+id/datebg" android:layout_height="110dp"
android:layout_width="25dp"></ImageView>
<ImageView android:id="@+id/icon1"
android:layout_toRightOf="@+id/datebg" android:layout_height="30dp"
android:layout_width="30dp" android:layout_alignBottom="@+id/imageView1"></ImageView>
<ImageView android:id="@+id/icon2"
android:layout_toRightOf="@+id/icon1" android:layout_height="30dp"
android:layout_width="30dp" android:layout_alignBottom="@+id/imageView1"></ImageView>
<ImageView android:id="@+id/icon3"
android:layout_toRightOf="@+id/icon2" android:layout_height="30dp"
android:layout_width="30dp" android:layout_alignBottom="@+id/imageView1"></ImageView>
<ImageView android:id="@+id/icon4" android:layout_toRightOf="@+id/icon3"
android:layout_height="30dp" android:layout_width="30dp"
android:layout_alignBottom="@+id/imageView1"></ImageView>
<ImageView android:id="@+id/icon5"
android:layout_toRightOf="@+id/icon4" android:layout_height="30dp"
android:layout_width="30dp" android:layout_alignBottom="@+id/imageView1"></ImageView>
<TextView android:id="@+id/date" android:text="Tue, Dec 12"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_alignParentLeft="true" android:textColor="@android:color/black"
android:textStyle="bold" android:gravity="center" android:visibility="invisible"></TextView>
尝试以下内容
ListView lv = getListView();
lv.setCacheColorHint(Color.TRANSPARENT); // not sure if this is required for you.
lv.setFastScrollEnabled(true);
lv.setScrollingCacheEnabled(false);
通过使用,可以轻松地使ImageView异步
我还注意到(如@Abid所述),调用lv.setScrollingCacheEnabled(false);改进滚动。我有一个列表视图,在Galaxy Tab 7“上运行良好,在Galaxy Tab 10.1上运行非常慢。原因是缓存所需的内存分配(以及堆增长的需要)。请确保首先查阅实际的Android文档,并将Java方法与Android XML属性进行比较:
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:cacheColorHint="@android:color/transparent"
android:fastScrollEnabled="true"
android:persistentDrawingCache="scrolling"
android:scrollingCache="false" />
对于那些需要优化XML属性的对象:
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:cacheColorHint="@android:color/transparent"
android:fastScrollEnabled="true"
android:persistentDrawingCache="scrolling"
android:scrollingCache="false" />
如果您要创建自己的适配器来处理列表视图项,我会有一个可绘图项的映射,您可以在适配器中继续引用该映射。问题很可能是,每当列表视图适配器获取列表视图的每个子视图时,它每次都必须加载该图像。更有效的方法是先将它们载入内存,然后再引用它们 这是您的listitem xml布局吗?您的问题得到回答了吗?为什么android:scrollingCache=“false”?收集滚动缓存可能会导致旧款手机速度变慢。这是我在应用程序中使用的一个XML片段。