5 votes

setOnItemClickListener dans une ListView affectant plusieurs lignes

J'ai un listview personnalisé et un adaptateur personnalisé. Lorsque je clique sur une ligne de ce listview, le texte d'un TextView devient blanc et l'arrière-plan de cette ligne devient noir.

Tout va bien, mais lorsque l'on clique sur une ligne, la couleur d'arrière-plan des autres lignes devient également noire et le défilement vers le haut et vers le bas est perturbé.

getView() dans l'adaptateur personnalisé

public View getView(final int position, View convertView, ViewGroup parent) {  
    final ListItem holder;
    View vi=convertView;

    if(vi==null){
        vi = inflater.inflate(R.layout.list, null);
        holder = new ListItem();
        holder.nametext= (TextView) vi.findViewById(R.id.name);
        vi.setTag(holder);

    }else{
        holder = (ListItem) vi.getTag();
    }

    holder.nametext.setText(""+item.name);
    return vi;
}

En activité principale :

CustomAdapter listadapter = new CustomAdapter(context, R.layout.list, items);
list.setAdapter(listadapter);

    list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> adapter, View view, int position, long arg){
               TextView v = (TextView) view.findViewById(R.id.name);
               view.setBackgroundColor(Color.BLACK);
               v.setTextColor(Color.WHITE);
        }

    });

J'ai essayé de mettre le setOnItemClickListener dans le getView() mais pas de chance non plus

Une aide ? Merci.

0voto

Biraj Zalavadia Points 9272

Il s'agit d'un effet par défaut de l'indication de la couleur du cache de la vue en liste que vous pouvez éviter en paramétrant "Android:cacheColorHint" à @null comme ceci

<ListView
        android:id="@+id/lstEventComment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"      
        android:cacheColorHint="@null"
/>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X