2011-01-03 5 views
0

Ich bin neu hier und ein ziemlich neuer Entwickler insgesamt. Ich habe online nach einer Antwort auf mein Problem gesucht, aber es scheint, dass niemand eine solche Anforderung hatte. Vielleicht ist mein Ansatz fehlerhaft. Bitte hilf mir.Kann ich separate ListAdapter für verschiedene TextView-Elemente in einem ListView haben?

Ich möchte ein ListView mit mehreren TextViews, die von drei verschiedenen Datensätzen aufgefüllt werden. Erster TV ist ein Titel des Artikels, zweiter eine Zusammenfassung und dritter eine Referenz. Der einzige Ansatz, den ich mir vorstellen kann, ist drei separate ListAdapter für die separaten TVs, aber wie Sie sich schon vorstellen können, überschreibt jeder nächste ListAdapter den vorherigen. Es sieht so aus, als ob nur ein ListView-Adapter an ein ListView-Layout angehängt werden kann. Ist das richtig? Hier sind Auszüge aus meinem Code.

-Test fest codierte Datenobjekte:

private void createDummyResults() { 

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

// die search Array von Search Objekten mit zufälligen Daten hier bevölkert sind, aber ich habe diesen Code der Kürze halber entfernt

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-Layout:

<?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

Sorry, meine XML wollte nicht vollständig laden, aber im Grunde in dem Listview-Layout gibt es diese Elemente zu dem der Zeiger in dem Code zu beziehen, die in einem Linearlayout eingewickelt werden: \t \t \t \t \t \t \t \t TomaszRykala

Antwort

2

Warum machen Sie nicht eine SearchResults-Klasse, etwa so:

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

Dann können Sie eine einfache custom ListAdapter schreiben, die in einer Liste von Search Objekte nehmen, dann können Sie jeden Teil Ihrer Listenposition gesetzt durch getTitle() Aufruf, getSummary() und getReference() für jedes Element wie Sie Einstellung die Aussicht.

EDIT: Sie sollten auch Ihr Layout in den Hierarchie-Viewer nehmen, es kann ziemlich vereinfacht werden. Beispielsweise werden Ihre drei TextViews in einem LinearLayout innerhalb eines LinearLayout festgelegt. Der äußere ist völlig überflüssig.

BEARBEITEN SIE WIEDER: Warten Sie ... bei näherer Betrachtung haben Sie bereits eine SearchResult-Klasse. Warum spalten Sie sie in separate Arrays, wenn sie bereits eigene Objekte sind? Verwenden Sie einfach den obigen Link, um einen benutzerdefinierten ListAdapter zu erstellen, der ein Array Ihrer SearchResult-Objekte aufnimmt und die erforderlichen Daten in die entsprechende TextView einfügt.

+0

Wow, danke Kumpel; Das hat mein Problem vollständig gelöst! :) Danke für deine Hilfe und das sehr nützliche Beispiel! – TomaszRykala

+0

Kein Problem! :-) – kcoppock

Verwandte Themen