我是新来的,也是一个相当新鲜的开发者。我已经在网上寻找我的问题的答案,但似乎没有人有这样的要求。也许我的方法存在缺陷。请帮帮我。
我想要一个包含多个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>
答案 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中。