Android 是否可以为ListView中的不同TextView项目提供单独的ListAdapter?
我是新来的,总体来说是一个相当新的开发人员。我在网上寻找我的问题的答案,但似乎没有人有这样的要求。也许我的方法有缺陷。请帮帮我 我想要一个包含多个文本视图的列表视图,这些文本视图由三组不同的数据填充。第一个TV是项目的标题,第二个是摘要,第三个是参考资料。我能想到的唯一方法是为单独的电视提供三个单独的ListAdapter,但正如您已经想象到的,每一个下一个ListAdapter都会覆盖上一个ListAdapter。看起来只有一个ListView适配器可以连接到ListView布局。这是正确的吗?下面是我的代码片段 测试硬编码数据对象:Android 是否可以为ListView中的不同TextView项目提供单独的ListAdapter?,android,listview,listadapter,Android,Listview,Listadapter,我是新来的,总体来说是一个相当新的开发人员。我在网上寻找我的问题的答案,但似乎没有人有这样的要求。也许我的方法有缺陷。请帮帮我 我想要一个包含多个文本视图的列表视图,这些文本视图由三组不同的数据填充。第一个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布局中,代码中的指针与这些元素相关,它们被包裹在一条直线上:哇,谢谢你,伙计;这完全解决了我的问题!:)谢谢你的帮助和非常有用的例子!