2010-01-07 10 views
14

In meiner ListActivity brauche ich Kopf- und Fußzeilenansichten (oben und unten in der Liste), die als vorherige Seite und nächste Seite auf meiner Liste zu verwenden sind, weil ich das möchte zeige nur 20 Gegenstände gleichzeitig an.android listviews: Kopf- und Fußzeilenansichten

ich mein Kopf und Fuß Ansichten, indem Sie:

getListView().addHeaderView(myHeaderView); 
getListView().addFooterView(myFooterView); 
setListAdapter(adapter); 

Dies funktioniert gut, aber ich brauche, um dynamisch zu entfernen und diese Kopf- und Fußzeile Ansichten hinzufügen, weil einige Seiten meiner Liste nicht ein nächstes haben Schaltfläche "Seite" oder Schaltfläche "Vorherige Seite".

Das Problem ist, ich kann AddHeaderView oder AddFooterView nicht aufrufen, nachdem ich SetListAdapter aufgerufen habe.

Gibt es einen Weg um dies?

+0

ich normalerweise um diese Hack durch einen Blick zu schaffen nur als Fußzeile zu setzen, bevor ich den Adapter gesetzt, und dann die Ansicht wieder entfernen. –

+0

Dies ist kein Fehler noch ein Versehen, sondern funktioniert wie vorgesehen :) –

+1

Können Sie ein wenig ausarbeiten? – Matthias

Antwort

10

Warum nicht einfach die Kopf- und Fußzeile auf Null Höhe reduzieren oder die Schaltflächen ausgrauen (noch besser).

Und die beste Benutzererfahrung wäre meiner Meinung nach, dynamisch mehr Elemente bei Bedarf (d. H. Beim Scrollen), wie die integrierte Google Mail App tut.

+4

Vereinbarte den Dynamic-Loading-Ansatz. Ich habe sogar einige wiederverwendbaren Code erstellt, um dies zu unterstützen: http://github.com/commonsguy/cwac-endless – CommonsWare

+3

Wenn ich mich richtig erinnere, die "ListView" nicht neu die Kopf- oder Fußzeilenansichten, selbst wenn Sie festlegen Ihre Sichtbarkeit auf "UNSICHTBAR" oder "VERLOREN", so dass Sie mit einem großen leeren Raum verlassen werden. –

+0

Auf jeden Fall würde das Verbergen von ihnen stören; Deaktivieren von Sounds besser. Und Marks (Commonsware.com) Ansatz ist wahrscheinlich am besten. –

3

Ja, das ist ein Fehler oder ein Versehen in der ListView Komponente. Sie können dies umgehen, indem Sie Ihre eigene WrapperListAdapter schreiben, die das Hinzufügen und Entfernen von festen Listenelementen behandelt, aber ich kann Ihnen sagen, dass das nicht ganz einfach ist.

Alternativ — und viel einfacher — können Sie eine feste Komponente über oder unter der ListView hinzufügen, wo Sie die nächste und vorherige Tasten platzieren.

+1

Als Update, wie Romain Guy erwähnt, ist dies das beabsichtigte Verhalten. Ich habe bei Android "Bürozeiten" gefragt, warum das so ist.Soweit ich mich erinnere, liegt dies daran, dass die Kopf- und Fußzeilen als Listenelemente berücksichtigt werden, sobald die Liste an einen Cursor gebunden ist, sodass das Hinzufügen/Entfernen der Offsets die Offsets durcheinander bringen würde. Wenn Sie eine Änderung vornehmen möchten, können Sie den Adapter an die Liste binden. Es wäre schön, wenn es einen Wrapper im SDK geben würde, aber es ist definitiv möglich, trotzdem einen eigenen zu erstellen. –

2

Wie wäre es Zurücksetzen der Adapter bei jedem Mal, wenn Sie benötigen Kopfansicht hinzuzufügen, wie auf diese Weise:

ListView.FixedViewInfo headerInfo = getListView().new FixedViewInfo(); 
headerInfo.isSelectable=false ; 
headerInfo.view = feedInfoView; 
headerInfos.add(headerInfo); 
headerViewListAdapter = new HeaderViewListAdapter(headerInfos,null,adapter); 
getListView().setAdapter(headerViewListAdapter); 
+0

Welche Art von Objekt ist feedInfoView? –