Question

J'utilise une liste de liste personnalisée pour afficher une liste dans laquelle les rangées même ont un fond et des rangées impaires.Pour ce faire, j'ai fabriqué une sous-classe d'arrayadapter avec une méthode de remplacement GeReDen GeveView (Int, Viewgroup) et définissez la ressource d'arrière-plan pour les rangées paires.

Cela a fonctionné, mais j'avais besoin d'ajuster les dimensions des vues pour être égales dans les rangées avec et sans arrière-plan, donc j'ai ajusté lesparams de layout comme suit:

@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;
}

J'ai essayé cela, et cela semblait fonctionner jusqu'à ce que je faisais défiler et puis de monter, ce qui a entraîné une application de l'arrière-plan à chaque rangée.

Ma question est la suivante: qu'est-ce que je fais mal?

J'utilise la bibliothèque de support V4 pour les fragments, et c'est la méthode Oncreate (Bundle) de mon fichier ListFraGment personnalisé:

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

Était-ce utile?

La solution

La vue utilisée pour établir la liste est réutilisée une fois qu'ils ne sont pas visibles à l'écran.

Dans votre code d'origine, une fois que l'arrière-plan a été défini sur R.Drawable.Marcador_wink_Normal sur une vue donnée, c'était R.Drawable.Marcador_wink_normal pour toujours.Lorsque vous avez ajouté l'autre, vous avez fait régler correctement l'arrière-plan sur ces vues réutilisées.

Autres conseils

D'accord, j'ai résolu que cela ajoute juste une déclaration el>:

@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;
}

Mais je ne comprends toujours pas pourquoi le problème s'est passé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top