2012-10-17 20 views
8

Desidero avere una lista con divisori diversi tra gli elementi dell'elenco. Ho usato questo codice per definire un divisore bianco con altezza 1:Impostazione del colore del divisore diverso per ogni elemento nella visualizzazione elenco

_listView.setDivider(new ColorDrawable(Color.WHITE)); 
_listView.setDividerHeight(1); 

Tuttavia imposta il divisore per tutto l'elemento essere bianco, e voglio solo alcuni di essi di essere bianco e l'altro in diversi colore.

Come posso farlo?

+1

Stai cercando di colori alternati, o definire diversi divisori colorati a diverso punti? – nickhar

+0

sto provando a definire i colori differenti del divisore per gli elementi differenti dipende dal soddisfare. sto provando a farlo in modo programmatico quando creo la lista, ma quando definisco colori diversi cambia tutti i divisori di questo colore e non solo il divisore dell'elemento specifico che volevo cambiare. – MrBug

risposta

9

Imposta il divisore in altezza su 0 e implementa una vista nel layout dell'articolo con l'altezza di 1 e modifica il suo colore in base alla voce di elenco ogni volta che viene creata la vista.

Ecco un esempio di layout XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/text" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 

    <View 
     android:id="@+id/divider" 
    android:layout_width="fill_parent" 
    android:layout_height="1dp" 
    android:background="#FFFFFFFF" /> 

</LinearLayout> 

e questo è come si cambia il colore della scheda:

public class MyAdapter extends BaseAdapter { 
    /** List of items to show */ 
    private ArrayList<String> items = new ArrayList<String>(); 
    private Context context; 
    private int color[]; 

    public OffersAdapter(Context c, ArrayList<String> items, int color[]) 
    { 
     super(); 
     this.context = c; 
     this.items = items; 
     this.color = color; 
    } 

    public int getCount() { 
     return items.size(); 
    } 

    public Object getItem(int position) { 
     return null; 
    } 

    public long getItemId(int position) { 
     return 0; 
    } 

public View getView(final int position, View convertView, ViewGroup parent) { 
    final ViewHolder viewHolder; 

    if(null == convertView) 
    { 
     LayoutInflater inflater = LayoutInflater.from(context); 
     convertView = inflater.inflate(R.layout.list_item, parent, false); 

     viewHolder.text = (TextView) convertView.findViewById(R.id.text); 
     viewHolder.divider = (View) convertView.findViewById(R.id.divider); 

     convertView.setTag(viewHolder); 
    } else { 
     //Retrieve the current view 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    //This is where you chance the divider color based on the item 
    viewHolder.divider.setBackgroundColor(color[position]); 

    viewHolder.text.setText(items.get(position)); 

    return convertView; 
} 

//Holds the current view 
private static class ViewHolder { 
     public TextView text; 
     public View divider; 
    } 
} 

Dove int color[] è una lista dei colori che si desidera utilizzare.

Maggiori informazioni su ViewHolder read here.

+0

l'ho provato. ma poi quando premi l'elemento e tieni premuto vedrai il colore dello sfondo non nella giusta posizione, coprirà la vista che ho creato. – MrBug

+0

Pubblica il tuo codice. Hai impostato un'altezza? – slybloty

+0

sì ho fatto ... _listView.setDivider (new ColorDrawable (Color.WHITE)); _listView.setDividerHeight (1); – MrBug

1
  1. separato il vostro articolo lista e tutta la vostra lista in xml
  2. Creare un adattatore personalizzato per le voci di elenco e creare un'istanza tua lista
  3. A seconda dei criteri che si desidera modificare il colore divisore per ogni nuovo elemento si aggiunge dalla scheda alla lista

Esempio:

listitem.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <TextView 
     android:id="@+id/sometext" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 

    <View 
     android:id="@+id/customdivider" 
    android:layout_width="fill_parent" 
    android:layout_height="1dp" 
      /> 

</LinearLayout> 

list.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    > 

    <ListView 
     android:id="@+id/totallynewlist" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     /> 

</LinearLayout> 

CustomAdapter.java

public class CustomAdapter extends BaseAdapter { 

    private Activity activity; 
    private ArrayList<HashMap<String, String>> data; 
    private static LayoutInflater inflater = null; 

    public SubjectListAdapter(Activity a, ArrayList<HashMap<String, String>> d) { 
     activity = a; 
     data = d; 
     inflater = (LayoutInflater) activity 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    } 

    public int getCount() { 
     return data.size(); 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 



     public View getView(int position, View convertView, ViewGroup parent) { 
      View vi = convertView; 
      if (convertView == null) 
       vi = inflater.inflate(R.layout.listitem, null); 

     //Find the divider here and depending on your criteria change the colour - if required take data from main activity if you need it to change the colour 
     View divider= (View) vi.findViewById(R.id.customdivider); 
     if(your criteria) 
      divider.setBackgroundColor(R.color.white); //assuming white is defined in    colors 
     else 
     set to whatever color 
     return vi; 
     } 
} 

nella vostra attività

ListView list = (ListView) findViewById(R.id.totallynewlist); 

    // creating new HashMap 
    HashMap<String, String> map = new HashMap<String, String>(); 
    <//Pass whatever condition you want for your criteria here if you need to - optional> 
    ListPass.add(map); 

    adapter = new CustomAdapter(this, ListPass); 

    list.setAdapter(adapter); 
+0

ma quale metodo cambia il divisore solo per un elemento specifico? il metodo setDivider cambia il colore del divisore per tutti gli elementi. – MrBug

+0

Fondamentalmente non utilizza il divisore impostato: crea una visualizzazione di 1 dp, che consente di modificare il colore di ogni elemento dell'elenco in base ai criteri. Cambia lo sfondo del divisorio di visualizzazione elementi in qualsiasi colore che desideri – Slartibartfast

+0

Ora lo stiamo modificando per ogni riga dell'elenco, quindi non usare il divisore di lista - questo è un metodo di lista e si applica all'intero elenco – Slartibartfast

Problemi correlati