2012-04-02 5 views
0

Ich versuche, eine Liste von Daten in einer Android-Aktivität zu zeigen. Normalerweise würde das jemand mit einer einfachen ListView tun, die ich schon oft benutzt habe. Aber jetzt habe ich eine Anwendung mit einer festen Kopf- und Fußzeile, wobei der mittlere Teil (der Inhalt) sowohl unter der Kopfzeile als auch unter der Fußzeile gescrollt wird. Im mittleren Abschnitt möchte ich andere Komponenten sowohl oberhalb als auch unterhalb der Liste der Daten hinzufügen, aber der gesamte Teil muss scrollbar sein. Ich habe versucht, Komponenten (wie eine Schaltfläche, Textansicht usw.) zu einem Listenansicht hinzuzufügen, aber der Layout-Builder in Eclipse lässt mich das nicht tun.Android: Datenliste Scrollen zusammen mit anderen Komponenten

Also begann ich mit einem ScrollView, wo Sie leicht jede Komponente hinzufügen können, die Sie mögen. Aber ich bin nicht berechtigt, eine ListView zu einer ScrollView hinzuzufügen, was ich verstehen kann, da es einen seltsamen Effekt erzeugen würde (da beide scrollen können).

Als nächstes wollte ich ein TableLayout verwenden, um TableRows dynamisch hinzuzufügen, aber auf mehreren Websites wird gesagt, dass es langsam ist und "nicht der richtige Weg". Ich konnte auch keine elegante Möglichkeit finden, den Trenner zwischen den einzelnen Elementen hinzuzufügen. Mit einem ListView wäre das alles sehr einfach erledigt.

Das folgende Bild explaines wahrscheinlich am besten die Wirkung Ich möchte: http://tinyurl.com/bvkec5d

Die Tabelle mit der Überschrift ‚Tabellendaten‘ können möglicherweise viele Einzelteile und damit in der Länge sehr groß haben. Was ich möchte nicht ist, dass die Tabelle eine feste Größe hat und die Elemente in dieser Tabelle scrollbar sind. Ich möchte eigentlich, dass die Tabelle größer wird und die ScrollView, die die Tabelle enthält, sollte daher ebenfalls wachsen. Ich möchte auch, dass die Infobox über der Tabelle entlang scrollt (wie bei allen anderen Komponenten, die später hinzugefügt werden).

Was ist der beste Weg, um diesen Effekt zu erzielen?

Antwort

0

Sie können ein einfaches vertikales LinearLayout (oder ein RelativeLayout) verwenden, das Ihre statische Kopf- und Fußzeile enthält und ein ListView zwischen ihnen verwendet. Sie können Kopf- und Fußzeilenansichten in der ListView festlegen, um den scrollbaren Kopf- und Fußzeileninhalt hinzuzufügen. Der Einfachheit halber als Beispiel hier ist die Art und Weise Linearlayout:

<LinearLayout android:orientation="vertical" 
       android:layout_height="match_parent" 
       android:layout_width="match_parent"> 
     <!--static header content... can be any kind of view--> 
     <TextView 
       android:layout_width="match_parent" 
       android:layout_weight="0" 
       android:layout_height="wrap_content"/> 
     <ListView 
       android:id="@+id/list" 
       android:layout_width="match_parent" 
       android:layout_height="0dp" 
       android:layout_weight="1"/> 

     <!--static footer content... can be any kind of view--> 
     <TextView 
       android:layout_width="match_parent" 
       android:layout_weight="0" 
       android:layout_height="wrap_content"/> 
</LinearLayout> 

Und in Code, können Sie sagen:

ListView theList = (ListView)findViewById(R.id.list); 

// example of creating header and footer views from inflation or by instantiation in code 
View myHeaderView = getLayoutInflater().inflate(R.layout.myHeaderLayout,theList,false); 
View myFooterView = new TextView(this, some layout params); 

theList.addHeaderView(myHeaderView); 
theList.addFooterView(myFooterView); 

ListView.addHeaderView und ListView.addFooterView sollten Sie ermöglichen eine andere statische Ansichten hinzuzufügen (deren Inhalt aktualisiert werden konnte dynamisch) an der Ober- oder Unterseite eines Listview:

public void addHeaderView (View v) 

Seit: API 1 Stufe eine feste Ansicht ap hinzufügen Birne an der Spitze der Liste. Wenn addHeaderView mehr als einmal aufgerufen wird, erscheinen die Ansichten in der Reihenfolge, in der sie hinzugefügt wurden. Mit diesem Aufruf hinzugefügte Ansichten können den Fokus nehmen, wenn sie möchten.

HINWEIS: Rufen Sie dies auf, bevor Sie setAdapter aufrufen. Dies ist so, dass ListView den mitgelieferten Cursor mit einem umschließen kann, der auch Header und Fußzeilenansichten berücksichtigt.

+0

Ich habe bereits eine vertikale Linearlayout als Root-Layout. Die Kopf- und Fußzeile sind bereits fixiert und das ist nicht das Problem, es tut mir leid, wenn Sie das verstanden haben. Meine Frage dreht sich alles um den mittleren Abschnitt: Der gesamte Teil muss scrollbar sein, unabhängig von der Länge der Datentabelle.Und ich möchte, dass alle Komponenten innerhalb dieses mittleren Abschnitts (der ein ScrollView ist) entlang scrollen. – Niles11

+0

Ich denke, dass Sie das mit ListView.addHeaderView und ListView.addFooterView tun können. Siehe das Dokument hier: http://developer.android.com/reference/android/widget/ListView.html ... dummer Linkformatierer ... Ich kann mich nicht wirklich mit der Funktion verbinden. :( –

+0

Hier http://tinyurl.com/7bdj7op können Sie ein neues Bild finden. Dieses Bild ist, was es mögen mag, gerade nachdem man den mittleren Abschnitt gescrollt hat. Wie Sie sehen können, sowohl die Datentabelle als auch die Infobox oben Scrollen entlang.Allerdings ist es sehr üblich, aber in diesem Fall habe ich eine Liste von Daten in der ScrollView, die eine zufällige Anzahl von Daten enthalten kann.Ich kann nicht eine ListView verwenden, da ich nicht hinzufügen kann andere Komponenten (wie die Infobox). Also meine Frage ist, wie man diesen Effekt bekommen? Ich schlug TableLayout, aber einige Websites sagen, es ist "nicht die Art und Weise zu tun" und langsam. – Niles11