ALTERNATE FOND DES ROUNDES DANS UNE LISTEDRAGEMENT Ne fonctionnant pas lors du redimensionnement des rangées
-
11-12-2019 - |
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));
}
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é.