【问题标题】:ANDROID: Adapter position returns to zero and re-adds views to ListViewANDROID:适配器位置归零并将视图重新添加到 ListView
【发布时间】:2010-11-11 08:55:28
【问题描述】:

我的应用需要能够以用户选择的顺序在一行中添加多个视图。

我发现这个教程似乎通过一些修改完成了我想要的。

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>

我更改了背景颜色和文本,但仅此而已。任何想法是什么问题?

谢谢!

【问题讨论】:

    标签: java android android-layout android-listview


    【解决方案1】:

    那是因为 ListView 回收了 Views。它根据需要创建尽可能多的视图,然后将不可用的视图作为下一个回收。

    所以你必须在适配器的 getView 或 bindView 方法中设置颜色/属性。

    顺便说一句。您发布的内容不会使 ListView 膨胀,因为其中没有“对象”。充其量它可能是单个 ListView 项目,但不是列表视图本身 ^^

    【讨论】:

    • 我可能不完全理解 inflate 的含义……这个布局被添加到我的主布局中的 ListView 中:S
    • 文本和颜色的所有细节都在适配器的 getView 方法中设置,并且在出现时都正确显示。我的问题是位置被重置,并且第二次将相同的布局添加到列表视图中
    【解决方案2】:

    我觉得现在问这个问题而不是完全回顾教程很愚蠢。

    只有在创建新的 ViewHolder 时,我才在主布局的 ListView 中设置布局中的值。因此,当我滚动时,视图被回收,但从未使用正确的视图设置进行更新。

    现在一切正常!

    干杯

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 1970-01-01
      • 2018-01-10
      • 2013-12-27
      • 2012-02-11
      • 2016-04-28
      • 2012-11-14
      • 2020-09-13
      • 1970-01-01
      相关资源
      最近更新 更多