Android - ListView с прокруткой изображений слишком медленный, даже без какой-либо обработки в методе getView адаптера - PullRequest
5 голосов
/ 20 декабря 2011

Я пытаюсь создать список людей, использующих 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>

Ответы [ 4 ]

5 голосов
/ 30 декабря 2012

Обязательно сначала сверьтесь с действующей документацией по Android и сравните методы Java с атрибутами Android XML:

http://developer.android.com/reference/android/widget/ListView.html

Для тех, кому нужна оптимизация в атрибутах 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" />
4 голосов
/ 20 декабря 2011

Попробуйте следовать

ListView lv = getListView();
lv.setCacheColorHint(Color.TRANSPARENT); // not sure if this is required for you. 
lv.setFastScrollEnabled(true);
lv.setScrollingCacheEnabled(false);
1 голос
/ 20 декабря 2011

Вы можете легко сделать ImageView асинхронным, используя WebImageView

Я также отметил (как утверждает @Abid), что вызов lv.setScrollingCacheEnabled (false); улучшает прокрутку У меня был ListView, который отлично работал на Galaxy Tab 7 "и был очень медленным на Galaxy Tab 10.1". Причиной было выделение памяти для кеша (и необходимость увеличения кучи).

0 голосов
/ 09 сентября 2014

Если вы создаете свой собственный адаптер для работы с элементами представления списка, у меня будет карта Drawables, на которую вы можете сохранить ссылку в Adapter.Скорее всего, проблема в том, что каждый раз, когда адаптер представления списка получает каждое дочернее представление для представления списка, ему приходится каждый раз загружать это изображение.Было бы более целесообразно загружать их в память заранее, а затем просто ссылаться на них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...