ANDROID: Положение адаптера возвращается к нулю и повторно добавляет представления в ListView. - PullRequest
0 голосов
/ 11 ноября 2010

Моему приложению требуется возможность добавлять несколько представлений в одну строку в выбранном пользователем порядке.

Я нашел этот учебник, который, кажется, выполнил то, что я хочу, с небольшой модификацией.

http://www.androidpeople.com/android-custom-listview-tutorial-example/

После изучения руководства и внесения необходимых изменений код работает, за исключением одной странной проблемы. Позиция увеличивается, но когда она достигает ~ 9, она возвращается к нулю, а затем снова добавляет виды, которые уже есть в списке и, таким образом, никогда не достигает> 9.

Кроме того, если я прокручиваю вниз, а затем возвращаюсь назад, самая первая запись изменилась! Это может измениться больше, но я не проверял это.

В ходе некоторых тестов я обнаружил, что textSize имеет некоторый эффект. Если я установлю его достаточно маленьким, чтобы все «строки» отображались на экране сразу, тогда они выглядят нормально.

Это мой макет списка, который надувается в основной макет:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:minHeight="60dip"
  style="@style/DefaultTheme">
    <TextView 
      android:id="@+id/Line01"
      android:layout_width="5dip"
      android:layout_height="fill_parent"
      android:background="#F00" />
    <TextView
      android:id="@+id/Line02"
      android:layout_width="5dip"
      android:layout_height="fill_parent"
      android:background="#0F0" />
    <TextView
      android:id="@+id/Line03"
      android:layout_width="5dip"
      android:layout_height="fill_parent"
      android:background="#00F"
      android:layout_marginRight="5dip"/>
    <LinearLayout
      android:id="@+id/LinearLayout"
      android:layout_weight="1"
      android:layout_width="wrap_content"
      android:layout_height="fill_parent"
      android:orientation="vertical"
      android:padding="2dip">
        <TextView android:id="@+id/Name"
          android:text="Name"
          style="@style/Name" />
        <TextView 
          android:id="@+id/Status"
          android:text="Status"
          style="@style/Status" />
    </LinearLayout>
    <ImageView 
      android:id="@+id/StatusImage"
      style="@style/StatusImage" />
</LinearLayout>

Я меняю цвета фона и текста, но это все. Есть идеи, в чем проблема?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 ноября 2010

Я чувствую себя глупо, спрашивая об этом сейчас и не возвращаясь полностью к учебнику.

Я устанавливал значения в своем макете, который я помещаю в ListView на свой основной макет, только когда был создан новый ViewHolder.Таким образом, когда я прокручивал, представления были переработаны, но никогда не обновлялись с правильными настройками просмотра.

Теперь все работает нормально!

Приветствия

0 голосов
/ 11 ноября 2010

Это потому, что ListView перезаписывает виды.Он создает столько представлений, сколько требуется, тогда тот, который недоступен, будет переработан следующим.

Таким образом, вы должны установить цвета / атрибуты в методах getView или bindView адаптера.

И кстати.то, что вы опубликовали, не раздувает ListView, так как в нем нет объекта `'.В лучшем случае это может быть один элемент ListView, но не сам просмотр списка ^^

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