使用每行中具有不同数量的ImageView来扩展ListView

时间:2011-05-12 08:56:55

标签: android android-layout android-xml android-inflate

我开始使用Android LayoutInflater,我需要一些帮助。

我有一个ListActivity,它使用以下XML中定义的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
    <ListView
        android:id="@+id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        />
</LinearLayout>

这个ListView填充了一个ArrayAdapter,它通过膨胀另一个XML来生成每一行,如下所示:

<?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="?android:attr/listPreferredItemHeight"
    android:padding="6dip"
    >
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:layout_height="fill_parent"
        >
        <TextView
            android:id="@+id/item_text"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center_vertical"
            android:textSize="20dip"
            android:textColor="#FFF"
        />
        <ImageView
            android:id="@+id/item_icon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_marginRight="6dip"
            android:src="@drawable/example_icon"
        />
    </LinearLayout>
</LinearLayout>

这很好用,但是现在我想为每个项目显示可变数量的图标(因此,ListView的每一行在TextView下可以有不同数量的ImageView)。

也许我必须为图标列表定义另一个XML,并以某种方式从嵌套布局构建ListView?我不知道最好的方法是什么。有什么建议吗?

谢谢!

编辑:这是我尝试做的一个例子:http://tinypic.com/r/2s9yniw/7

2 个答案:

答案 0 :(得分:0)

您只需在每个行的XML布局中包含许多图像,并在不再需要它们时将这些图像的可见性设置为GONE(您可以将图像放在一个布局XML中文件,然后{3}在你的行布局文件上这3次。

您可以通过将图像布局XML文件多次膨胀到每行所需的次数然后将其添加到行视图中来实现(但如果您第一次添加2个图像,则会产生回收问题)下一行需要3);但从我记得你不能将膨胀的内容添加到适配器行或你得到一个例外(不完全确定,所以如果有疑问,试试看。)

答案 1 :(得分:0)

在特定行中,您可以将图片视图放置在该行的文本视图下方,当您不需要显示它们时,可以通过将可见性设置为 GONE 来隐藏它。