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));
}
.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top