Quindi, sto guardando questo video http://www.youtube.com/watch?v=N6YdwzAvwOA e Romain Guy sta mostrando come rendere più efficiente il codice adattatore UI usando il metodo getView()
. Questo vale anche per CursorAdapters? Attualmente sto usando bindView()
e newView()
per i miei adattatori di cursore personalizzati. Dovrei usare invece getView?GetView vs. BindView in un CursorAdapter personalizzato?
risposta
CursorAdapter
ha un'implementazione di getView()
che delega a newView()
e bindView()
, in modo da impone il modello fila riciclaggio. Quindi, non è necessario eseguire operazioni speciali con lo CursorAdapter
per il riciclaggio di file se si sta eseguendo l'override di newView()
e bindView()
.
/**
* @see android.widget.ListAdapter#getView(int, View, ViewGroup)
*/
public View getView(int position, View convertView, ViewGroup parent) {
if (!mDataValid) {
throw new IllegalStateException("this should only be called when the cursor is valid");
}
if (!mCursor.moveToPosition(position)) {
throw new IllegalStateException("couldn't move cursor to position " + position);
}
View v;
if (convertView == null) {
v = newView(mContext, mCursor, parent);
} else {
v = convertView;
}
bindView(v, mContext, mCursor);
return v;
}
Questo codice sorgente CursorAdapter, chiaramente CursorAdapter lavorare di più.
Il CursorAdapter
implementazione è diversa da adattatori normali sub-classificare come BaseAdapter
, non è necessario eseguire l'override getView()
, getCount()
, getItemId()
perché tali informazioni possono essere recuperate dal cursore stesso.
Dato un Cursor
, è sufficiente sostituire due metodi per creare una sottoclasse CursorAdapter
:
bindView()
: Dato un vista, aggiornarlo per visualizzare i dati nel cursore fornito.
newView()
: Questo viene chiamato per costruire una nuova vista che entra nell'elenco.
Il CursorAdapter
si prenderà cura di riciclaggio di vista (a differenza del metodo getView()
sul regolare Adapter
). Non chiama lo newView()
ogni volta che ha bisogno di una nuova riga. Se ha già un (non null
), chiamerà direttamente lo bindView()
, in questo modo, la vista creata verrà riutilizzata. Suddividendo la creazione e la popolazione di ciascuna vista in questi due metodi, lo CursorAdapter
consente di riutilizzare la vista dove, come negli adattatori regolari, entrambe queste operazioni vengono eseguite nel metodo getView()
.
Grazie, molto utile. – LarsH
- 1. SimpleCursorAdapter vs CursorAdapter?
- 2. Il modello ViewHolder è stato implementato correttamente in CursorAdapter personalizzato?
- 3. BaseAdapter vs CursorAdapter
- 4. CursorAdapter vs ResourceCursorAdapter
- 5. CursorAdapter vs ArrayAdapter per un ListView
- 6. Android - Il pattern ViewHolder è implementato automaticamente in CursorAdapter?
- 7. L'adattatore personalizzato getview non si chiama
- 8. Questo CursorAdapter personalizzato per un ListView è correttamente codificato per Android?
- 9. cursoradapter con layout di righe differenti
- 10. Come gestire l'eliminazione di un elemento su un CursorAdapter
- 11. Ottieni cursore corretto in CustomCursor Adapater getView()
- 12. ORMLite con CursorAdapter in Android
- 13. Quando getView() in ArrayAdapter si chiama
- 14. Custom ArrayAdapter setBackground in getView
- 15. Quale CursorAdapter devo usare?
- 16. Textview di completamento automatico Android e Cursoradapter
- 17. Android: come usare CursorAdapter?
- 18. SimpleCursorAdapter and CursorAdapter
- 19. Separatori di ListView utilizzando un CursorAdapter
- 20. getView() restituisce null
- 21. spiegazione del metodo GetView() di un ArrayAdapter
- 22. Ancora un altro getView chiamato più volte
- 23. Impossibile controllare/deselezionare CheckedTextView all'interno di getView
- 24. Qual è la differenza tra `@ Bind` e` @ BindView` in butterknife?
- 25. getView in fragment restituisce talvolta null
- 26. Provare a scavalcare getView in un SimpleCursorAdapter dà NullPointerExceptio
- 27. Getview Chiamato più volte in Android
- 28. Differenza tra GetView & getDropDownView in SpinnerAdapter
- 29. Ambito direttiva personalizzato vs attrs
- 30. App.Config vs file XML personalizzato
Come si applica il motivo ViewHolder? Lo avrei diviso tra newView() e bindView()? –
@Scienceprodigy: In 'newView()', crei il 'ViewHolder' per la riga e lo associ a' setTag() '. In 'bindView()', si recupera 'ViewHolder' tramite' getTag() '. – CommonsWare
Grazie, funziona. Però ho un po 'di problemi con il riciclo delle viste, perché ho degli elementi di lista che hanno un'intestazione che è DISPONIBILE per impostazione predefinita, che uso per visualizzare le sezioni datate. Tutto si mostra bene fino a quando lancio la lista verso l'alto o verso il basso, poi ci sono le intestazioni che mostrano dove non dovrebbero essere. –