2011-01-03 6 views
0

私はここで新しいです。私は自分の問題に対する答えをオンラインで見てきましたが、誰もそのような要件を持っていなかったようです。おそらく私のアプローチには欠陥があるかもしれない。私を助けてください。ListViewの異なるTextViewアイテムに対して別々のListAdapterを使用できますか?

私は、3つの異なるデータセットによって作成された複数のTextViewでListViewを作成したいと考えています。最初のTVはアイテムのタイトル、2番目のサマリー、3番目のリファレンスです。私が考えることができる唯一のアプローチは、別々のTVのための3つの別々のListAdapterですが、あなたが想像しているように、次のすべてのListAdapterは前のものを上書きします。 1つのListViewアダプタのみをListViewレイアウトにアタッチすることができます。これは正しいです?ここに私のコードのスニペットがあります。

テストハードコーディングされたデータ・オブジェクト:

にsearchResultsオブジェクトのにsearchResultsアレイがランダムなデータでここに取り込まれている、私は簡潔にするため、このコードを削除しました//
private void createDummyResults() { 

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

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

、私のXMLは、フルにロードしたくなかったが、基本的には、リストビューレイアウトのコード内のポインタがに関連すると、これらの要素があり、のLinearLayoutの中に包まれている:\t \t \t \t <のTextView \t \t \tアンドロイド:ID = "@ + ID/summaryPane" \t \t \tアンドロイド:layout_width = "wrap_content" \t \t \tアンドロイド:layout_height = "wrap_content" \t \t \t> \t \t \t \t TomaszRykala

答えて

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; 
    } 
} 

その後、あなたは、あなたがあなたが設定しているように各アイテムでgetTitle()getSummary()、およびgetReference()を呼び出すことによって、あなたのリスト項目の各部分を設定することができ、にsearchResultsオブジェクトのリストになります簡単なcustom ListAdapterを書くことができます景色。

編集:あなたはまた、階層ビューアにあなたのレイアウトを取る必要があります、それはかなり単純化することができます。たとえば、3つのTextViewはLinearLayout内のLinearLayoutに設定されています。外側のものは完全に冗長です。

もう一度編集してください。お待ちください...もう少し見ると、既にSearchResultクラスがあります。なぜ彼らはすでに別の配列に分割しているのですか?上記のリンクを使用して、SearchResultオブジェクトの配列を取り込み、必要なデータを対応するTextViewに挿入するカスタムListAdapterを作成するだけです。申し訳ありません

+0

うわー、ありがとう。これは私の問題を完全に解決しました! :)あなたの助けと非常に有用な例をありがとう! – TomaszRykala

+0

問題ありません! :-) – kcoppock

関連する問題