Sfondo alternativo per le righe in una fragile non funziona quando si ridiseleziona le righe
-
11-12-2019 - |
Domanda
Sto usando un frammento di listino personalizzato per visualizzare un elenco in cui anche le righe hanno uno sfondo e una riga dispari non lo fanno.Per fare ciò ho fatto una sottoclasse di arrayadapter con un metodo Overniden GetView (INT, View, ViewGroup) e impostare la risorsa di sfondo per le file uniforme lì.
Ha funzionato, ma avevo bisogno di regolare le dimensioni delle opinioni da uguagliare nelle righe con e senza sfondo, quindi ho regolato i layoutparams come segue:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
if ((position & 1) == 0) {
view.setBackgroundResource(R.drawable.marcador_wink_normal);
}
ViewGroup.LayoutParams params = view.getLayoutParams();
params.height = rowHeight;
view.setLayoutParams(params);
return view;
}
.
L'ho provato, e sembrava funzionare fino a quando non ho fatto scorrere giù e poi, il che ha provocato lo sfondo applicato ad ogni riga.
La mia domanda è: cosa sto facendo male?
Sto usando la libreria di supporto V4 per i frammenti, e questo è il metodo ONCreate (Bundle) del mio elenco personalizzatoFRAGMENT:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
android.R.layout.simple_list_item_activated_1 : android.R.layout.simple_list_item_1;
setListAdapter(new WinkAdapter(getActivity(), layout, TEST_LIST));
}
. Soluzione
La vista utilizzata per compensare l'elenco viene riutilizzata una volta che non sono visibili sullo schermo.
Nel tuo codice originale, una volta che lo sfondo è stato impostato su r.drawable.marcador_wink_normal su una determinata vista, è stato r.drawable.marcador_wink_normal per sempre.Quando hai aggiunto l'altro, hai reso il background correttamente su queste viste riutilizzate.
Altri suggerimenti
Okay, ho risolto semplicemente aggiungendo un Emport :
.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
if ((position & 1) == 0) {
view.setBackgroundResource(R.drawable.marcador_wink_normal);
}
else {
view.setBackgroundColor(0);
}
ViewGroup.LayoutParams params = view.getLayoutParams();
params.height = 100;
view.setLayoutParams(params);
return view;
}
Ma ancora non capisco perché il problema è successo.