Android 是否可以为ListView中的不同TextView项目提供单独的ListAdapter?

Android 是否可以为ListView中的不同TextView项目提供单独的ListAdapter?,android,listview,listadapter,Android,Listview,Listadapter,我是新来的,总体来说是一个相当新的开发人员。我在网上寻找我的问题的答案,但似乎没有人有这样的要求。也许我的方法有缺陷。请帮帮我 我想要一个包含多个文本视图的列表视图,这些文本视图由三组不同的数据填充。第一个TV是项目的标题,第二个是摘要,第三个是参考资料。我能想到的唯一方法是为单独的电视提供三个单独的ListAdapter,但正如您已经想象到的,每一个下一个ListAdapter都会覆盖上一个ListAdapter。看起来只有一个ListView适配器可以连接到ListView布局。这是正确的吗

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

我想要一个包含多个文本视图的列表视图,这些文本视图由三组不同的数据填充。第一个TV是项目的标题,第二个是摘要,第三个是参考资料。我能想到的唯一方法是为单独的电视提供三个单独的ListAdapter,但正如您已经想象到的,每一个下一个ListAdapter都会覆盖上一个ListAdapter。看起来只有一个ListView适配器可以连接到ListView布局。这是正确的吗?下面是我的代码片段

测试硬编码数据对象:

    private void createDummyResults() {

    ArrayList<SearchResult> searchResults = new ArrayList<SearchResult>();
private void createDummyResults(){
ArrayList searchResults=新建ArrayList();
//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);

}
String[]searchResultsTitles=新字符串[searchResults.size()];
String[]searchResultsSummaries=新字符串[searchResults.size()];
String[]searchResultsReferences=新字符串[searchResults.size()];
对于(int i=0;i
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>

为什么不创建一个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;
    }
}
然后,您可以编写一个简单的示例,其中包含一个SearchResults对象列表,然后您可以通过在设置视图时对每个项目调用
getTitle()
getSummary()
getReference()
来设置列表项的每个部分

编辑:你也应该把你的布局放到层次结构查看器中,它可以简化很多。例如,在LinearLayout中的LinearLayout中设置了三个文本视图。外部的一个是完全多余的


再次编辑:等等…仔细看,您已经有了一个SearchResult类。既然它们已经是自己的对象,为什么要将它们拆分为单独的数组?只需使用上面的链接创建一个自定义ListAdapter,它接收SearchResult对象数组,并将必要的数据插入相应的TextView。

对不起,我的XML不想完全加载,但基本上在ListView布局中,代码中的指针与这些元素相关,它们被包裹在一条直线上:哇,谢谢你,伙计;这完全解决了我的问题!:)谢谢你的帮助和非常有用的例子!