Ho un ListView con un adattatore di lista personalizzato. Nel metodo getView(), sto usando il 'pattern' di ViewHolder come mostrato nelle demo di API per ListView14.java. Quando eseguo il rendering della lista, sembra che si carichi correttamente. Tuttavia, il problema che sto incontrando è che quando faccio scorrere l'elenco, sto vedendo i dati per l'elenco appaiono nelle righe sbagliate (cioè un TextView che dovrebbe essere nella riga 10 viene visualizzato nella riga 2 per esempio). Tuttavia, quando non utilizzo l'viewholder e richiama findViewById() ogni volta, la vista elenco viene visualizzata correttamente.viewview android viewview. quando usarlo, e quando non su
risposta
Tuttavia, il problema che sto funzionando in è che quando ho scorrere la lista, io sono vedere i dati per la lista presentarsi nelle righe sbagliate (vale a dire un TextView che dovrebbe essere in la riga 10 mostra nella riga 2, ad esempio).
Molto probabilmente, si sta impropriamente Riciclaggio filari, in modo tale che il ViewHolders
si stanno manipolando non sono quelle giuste per la riga si restituisce.
Here is a free excerpt da uno dei miei libri che riguarda più il riciclaggio delle righe, forse ti aiuterà a identificare dove le cose stanno andando male.
quindi penso di aver scoperto il vero problema qui. quando imposti i parametri di layout al volo per ogni riga, devi assicurarti di farlo per tutte le condizioni. il mio problema era che se era la prima riga, ho impostato un parametro di layout (come padding o margini ecc.), ma se era una riga centrale, non ho impostato esplicitamente quei parametri pensando che avrebbe usato solo quello che era gonfiato dalla vista inflater. Questo spiega perché ha funzionato quando ho gonfiato la vista ogni volta. Ecco una prima & dopo:
PRIMA:
if (position == 0) {
layoutParams.topMargin = uiHelper.getDip(15.0f);
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP,
RelativeLayout.TRUE);
holder.actionMenu.setLayoutParams(layoutParams);
holder.contentLayout.setBackgroundResource(R.drawable.top_row);
} else if (position == posts.size() - 1) {
holder.contentLayout
.setBackgroundResource(R.drawable.bottom_row);
holder.contentLayout.setPadding(holder.contentLayout
.getPaddingLeft(),
holder.contentLayout.getPaddingTop(),
holder.contentLayout.getPaddingRight(),
holder.contentLayout.getPaddingBottom() + uiHelper.getDip(10.0f));
} else {
holder.contentLayout
.setBackgroundResource(R.drawable.inner_row);
}
DOPO: `
layoutParams.topMargin = uiHelper.getDip(10.0f);
holder.contentLayout.setPadding(holder.contentLayout
.getPaddingLeft(),
holder.contentLayout.getPaddingTop(),
holder.contentLayout.getPaddingRight(),
uiHelper.getDip(10.0f));
if (position == 0) {
layoutParams.topMargin = uiHelper.getDip(15.0f);
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP,
RelativeLayout.TRUE);
holder.contentLayout.setBackgroundResource(R.drawable.top_row);
} else if (position == posts.size() - 1) {
holder.contentLayout
.setBackgroundResource(R.drawable.bottom_row);
holder.contentLayout.setPadding(holder.contentLayout
.getPaddingLeft(),
holder.contentLayout.getPaddingTop(),
holder.contentLayout.getPaddingRight(),
uiHelper.getDip(20.0f));
} else {
holder.contentLayout
.setBackgroundResource(R.drawable.inner_row);
}
holder.actionMenu.setLayoutParams(layoutParams);
- Ho affrontato lo stesso problema
- risolvere dopo aver seguito techninc
- Motivo: non Adapter Caricato frequentemente.
nella classe adattatore aggiuntivi personalizzati ViewHolder utilizzando specificatori di accesso
private static class ViewHolder { protected TextView itemName; }
In Get View metodo
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
// create a ViewHolder reference
ViewHolder holder;
//check to see if the reused view is null or not, if is not null then reuse it
if (view == null) {
holder = new ViewHolder();
view = mLayoutInflater.inflate(R.layout.list_item, null);
holder.itemName = (TextView) view.findViewById(R.id.list_item_text_view);
// the setTag is used to store the data within this view
view.setTag(holder);
} else {
// the getTag returns the viewHolder object set as a tag to the view
holder = (ViewHolder)view.getTag();
}
// now Use Holder object toget Idss
holder.itemName.setText(" sample text based on position ");
}
Importante: e non dovremmo impostare qualsiasi tag per la vista oggetto ad eccezione dell'oggetto Viewholder
Grazie mille per questo utile snip del codice. – swiftBoy
- 1. Display List Sottotitoli e titoli di ViewView
- 2. Passando Pk o Slug a ViewView generico in Django?
- 3. cos'è ICustomTypeDescriptor e quando usarlo?
- 4. Cos'è Request.InputStream e quando usarlo?
- 5. @ModelAttribute annotazione, quando usarlo?
- 6. SignInManager, che cos'è e come, quando usarlo?
- 7. polimorfico_allocatore: quando e perché dovrei usarlo?
- 8. spiegazione di D_GNU_SOURCE Perché usarlo e quando?
- 9. Che cos'è __declspec e quando devo usarlo?
- 10. cosa non ha scope scope e quando usarlo?
- 11. composto da Rails - quando usarlo?
- 12. Quando utilizzare limit e quando non su
- 13. Estensione degli elementi in un ViewView WPF all'interno di un ViewBox
- 14. DatePicker non funziona quando si cerca di usarlo
- 15. Differenza tra id e class in CSS e quando usarlo
- 16. Che cos'è un MvcHtmlString e quando dovrei usarlo?
- 17. Che cos'è la delega? Quando dovrei usarlo?
- 18. Che cos'è un mock e quando dovresti usarlo?
- 19. Obiettivo C quando utilizzare alloc e quando non su
- 20. ResolvedParameter in Unity. Qualcuno può spiegare quando usarlo?
- 21. Quando utilizzare HTML5 in Android? quando non usi?
- 22. Quando utilizzare segnali e slot e quando non a
- 23. 'android.support.test.espresso non esiste' quando voglio usarlo per il test apk individuale
- 24. ArrayIndexOutOfBoundsException quando mostra Toast su Android Lollipop
- 25. Android @Intdef per bandiere come usarlo
- 26. Quando utilizzare e non utilizzare la classe Application di Android?
- 27. Quando dovrei usare AutoMapper e quando non lo sono
- 28. Quando fare innesca il fuoco, e quando non è vero
- 29. Quando aspettarsi e quando fermarsi?
- 30. Quando usare set -e
è davvero un grande tutorial, grazie. – eric2323223