2012-03-09 12 views
50

Ho cercato di creare una visualizzazione elenco stilisticamente diversa, come molte altre persone, e ho iniziato cercando di estendere AbsListView. Per il documento Android, AbsListView è:È possibile estendere AbsListView per creare nuove implementazioni di ListView?

Classe base che può essere utilizzata per implementare elenchi di articoli virtualizzati. Un elenco non ha una definizione spaziale qui. Per esempio, subclases di questa classe in grado di visualizzare il contenuto della lista in una griglia, in un carosello, come pila, ecc

Dopo un certo sforzo e revisione dell'attuazione ListView, sembra che essa non può essere possibile estendere AbsListView come fa ListView a causa dell'accoppiamento delle due classi e dell'impossibilità di accedere ad alcuni membri del pacchetto. Mi sono imbattuto in questo modulo Romain Guy:

AbsListView e AbsSpinner sono progettati per essere esteso nel quadro . Potrebbero essere estesi anche in app di terze parti, ma abbiamo fatto non esporre tutti i campi e i metodi protetti necessari di proposito. Vogliamo essere molto attenti nel modo in cui esponiamo tali API in modo da non ottenere informazioni su per le estensioni future e le modifiche interne. La nostra attuale raccomandazione consiste semplicemente nel copiare/incollare il codice necessario all'interno dell'app .

Ho iniziato a provare a fare questo, ma copiare AbsListView diventa una tana del coniglio di copiare in un mucchio di altre cose e sembra davvero una proposta perdente. Volevo vedere se qualcuno ha avuto successo estendendo AbsListView che potrebbe condividere una metodologia.

[1] http://developer.android.com/reference/android/widget/AbsListView.html

[2] https://groups.google.com/forum/?fromgroups#!topic/android-developers/UhbR1tpVvF0

+0

"sembra davvero una proposta persa" - questa sarebbe la mia valutazione della situazione. – CommonsWare

+0

Grazie Marco. Sembra il Vangelo anche a me. –

+0

forse potresti essere un po 'più specifico di cosa intendi per "lista stilisticamente diversa". Intendi qualcosa che non è una lista verticale? o intendi qualcosa che è verticale, ma ha colori personalizzati, viste, intestazioni, ecc.? – mtmurdock

risposta

4

Il post è circa 2010, ma la sua valutazione è ancora vero oggi. Alcuni metodi necessari, i campi & sono protetti, al fine di prevenire future incompatibilità che potrebbero derivare dalla modifica degli interni di AbsListView.

La soluzione migliore è ancora copiare il codice per AbsListView nel progetto, insieme alle dipendenze necessarie (la tana del coniglio che hai menzionato).

Nel frattempo, se vuoi descrivere che tipo di View stai cercando di costruire, potremmo essere in grado di indicarti una direzione leggermente più semplice della creazione del tuo AbsListView?

+0

Mi piacerebbe creare una vista che presenti una vista elenco orizzontale, si connette a un adattatore e ricicla viste . Deve essere scorrevole e accettare viste di larghezza variabile, anche se dovrebbe mantenere un'altezza coerente. –

+0

Ah. Potresti voler sfruttare il lavoro che altri hanno già fatto per questo. Ad esempio, c'è un listview orizzontale semi-popolare su: https://github.com/dinocore1/DevsmartLib-Android/blob/master/devsmartlib/src/com/devsmart/android/ui/HorizontalListView.java –

+0

Sì, questo è esattamente quello che sto usando ma, per essere completamente sincero, lascia molto a desiderare. Ho dovuto modificarlo pesantemente e, francamente, non può mai fare le cose necessarie a causa del modo in cui determinati file vengono inseriti in Android. Oh bene, non combattere più questa battaglia per il momento;) –

2

Ho avuto la stessa esperienza provando a sottoclasse ListView e AbsListView per sviluppare un foglio di calcolo scorrevole 2D. Ho finito con la mia sottoclasse di ViewGroup che gestisce il layout e una sottoclasse di TwoDScrollView per gestire lo scorrimento. Le parti più difficili sono far funzionare correttamente le fionde (ovvero creare e posizionare nuove viste prima di scorrere nella vista) e sincronizzare le posizioni di visualizzazione tra i componenti scorrevoli. Con il tempo sufficiente, è possibile creare un componente robusto che estrae i dati da un cursore e lo fa scorrere in modo abbastanza fluido e rapido.

Problemi correlati