2010-09-27 14 views
1

J'ai un ListView. Lorsque je clique sur un ListItem, je mets l'arrière-plan de la ListItem (il est vue) à une autre couleur:Problème de sélecteur ListView: la sélection n'est pas supprimée

listView.setOnItemClickListener(new OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
        setupDetailView(position); 
        setupChartView(position); 
        setupARView(position); 
        emptyView.setVisibility(View.INVISIBLE); 

        quotesAdapter.isSelected = true; 
        //v.setBackgroundResource(R.drawable.stocks_selector); 
       } 
      }); 

ici est mon adaptateur:

private class QuoteAdapter extends ArrayAdapter<Quote> { 

     private ArrayList<Quote> items; 
     public boolean isSelected = false; 

     public QuoteAdapter(Context context, int textViewResourceId, ArrayList<Quote> items) { 
      super(context, textViewResourceId, items); 
      this.items = items; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View v = convertView; 
      if (v == null) { 
       LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       v = vi.inflate(R.layout.mainrow, null); 

       if(isSelected) 
        v.setBackgroundResource(R.drawable.red); 
       else 
        v.setBackgroundResource(R.drawable.transparent_background); 
      } 

Le problème est, si je sélectionne plusieurs lignes , puis plusieurs lignes ont un arrière-plan coloré. Je veux seulement que l'élément cliqué ait un arrière-plan coloré. Donc, si je clique sur la ligne 2, je veux qu'il devienne rouge, puis si je clique sur la ligne 1, je veux que la ligne 2 revienne à la normale, et la ligne 1 pour devenir rouge.

Comment est-ce que je peux faire ceci?

Répondre

2

Mettez votre sélecteur de liste dans votre ListView

<ListView 
     android:id="@+id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:cacheColorHint="#00000000" 
     android:listSelector="@drawable/stocks_selector" /> 

votre stocks_selector.xml devrait ressembler à

<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    type="rectangle" 

> 
    <gradient 
     android:startColor="@color/start_gradient" 
     android:endColor="@color/end_gradient" 
     android:angle="270" /> 
/> 
</shape> 
+0

Pas de chance, même résultat. –

+0

Vous avez supprimé l'appel à setBackground, n'est-ce pas? –

+0

Um, vous n'avez pas besoin de liste d'état pour cela. ListView gérera ce qui est sélectionné. Vérifiez les drawables SDK (liste .... xml) pour voir comment construire des sélecteurs. –