我可以在ListView中为不同的TextView项目使用单独的ListAdapter吗?

时间:2011-01-03 17:36:02

标签: android listview listadapter

我是新来的,也是一个相当新鲜的开发者。我已经在网上寻找我的问题的答案,但似乎没有人有这样的要求。也许我的方法存在缺陷。请帮帮我。

我想要一个包含多个TextView的ListView,这些TextView由三组不同的数据填充。第一个电视是项目的标题,第二个是摘要,第三个是参考。我能想到的唯一方法是为单独的电视设置三个独立的ListAdapter,但正如您已经想象的那样,每个下一个ListAdapter都会覆盖前一个。看起来只有一个ListView适配器可以附加到ListView布局。它是否正确?以下是我的代码片段。

测试硬编码数据对象:

    private void createDummyResults() {

    ArrayList<SearchResult> searchResults = new ArrayList<SearchResult>();

//此处使用随机数据填充SearchResults对象的searchResults数组,但为了简洁,我删除了此代码

    String[] searchResultsTitles = new String[searchResults.size()];
    String[] searchResultsSummaries = new String[searchResults.size()];
    String[] searchResultsReferences = new String[searchResults.size()];

    for (int i = 0; i < searchResults.size(); i++) {
        searchResultsTitles[i] = searchResults.get(i).getTitle();
        searchResultsSummaries[i] = searchResults.get(i).getSummary();
        searchResultsReferences[i] = searchResults.get(i).getReference();
    }

    // this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, searchResultsList));
    ArrayAdapter<String> aa1 = new ArrayAdapter<String>(this, R.layout.results, R.id.titlePane, searchResultsTitles);
    ArrayAdapter<String> aa2 = new ArrayAdapter<String>(this, R.layout.results, R.id.summaryPane, searchResultsSummaries);
    ArrayAdapter<String> aa3 = new ArrayAdapter<String>(this, R.layout.results, R.id.referencePane, searchResultsReferences);

    this.setListAdapter(aa1);
    this.setListAdapter(aa2);
    this.setListAdapter(aa3);

}

XML布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFF"
    >
    <LinearLayout
        android:id="@+id/resultPane"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center_vertical"
        android:clickable="true"
        android:focusable="true"
        >
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="5dp"
            android:src="@drawable/uk_statute_64"
            >
        </ImageView>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:background="#FFF"
            >
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                >
            <TextView
                android:id="@+id/titlePane"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="#FFF"
                android:textColor="#000"
                android:textStyle="bold"
                android:singleLine="true"
                android:text="This is the Title field"
                >
            </TextView>
            <TextView
                android:id="@+id/summaryPane"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="#FFF"
                android:textColor="#000"
                android:singleLine="false"
                android:maxLines="2"
                android:text="This is the Summary field; it needs to be two lines long."
                >
            </TextView>
            <TextView
                android:id="@+id/referencePane"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="#FFF"
                android:textColor="#AAA"
                android:singleLine="true"
                android:text="This is the ref field, eg. 1989 c.46 s.17"
                >
            </TextView>
        </LinearLayout>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

1 个答案:

答案 0 :(得分:2)

为什么不创建一个SearchResults类,如下所示:

private class SearchResults {

    private String title;
    private String summary;
    private String reference;

    public String getTitle() {
        return title;
    }

    public String getSummary() {
        return summary;
    }

    public String getReference() {
        return reference;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setSummary(String summary) {
        this.summary = summary;
    }

    public void setReference(String reference) {
        this.reference = reference;
    }
}

然后您可以编写一个简单的custom ListAdapter,其中包含SearchResults对象列表,然后您可以通过调用getTitle()getSummary()和{来设置列表项的每个部分在设置视图时,对每个项目{1}}。

编辑:您还应该将您的布局放入层次结构查看器中,它可以简化很多。例如,您的三个TextView在LinearLayout中的LinearLayout中设置。外层完全是多余的。

再次编辑:等等......仔细观察,你已经拥有了一个SearchResult类。当它们已经是自己的对象时,为什么要将它们分成单独的数组?只需使用上面的链接创建一个自定义ListAdapter,它接收一个SearchResult对象数组,并将必要的数据插入到相应的TextView中。