Impostare diversi colors divisori a ciascun elemento nella vista elenco

Voglio avere un elenco con differenti divisori tra gli elementi di elenco. Ho usato questo codice per definire un divisore bianco con altezza 1:

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

Tuttavia imposta il divisore per tutto l'elemento per essere bianco e voglio che solo alcuni di essi siano bianchi e l'altro in un colore diverso.

  • Come aggiungere id a public.xml?
  • Imansible build un progetto Android utilizzando Android Studio - Gradle 1.7
  • Come get la posizione del file * .apk nel dispositivo Android
  • Come spostare l'image in su e in basso continuamente usando l'animation di translate in android?
  • Disposable-hdpi, Disposable-mdpi, Disegnabile-ldpi Android
  • Actionbarsherlock - modifica il colore della linea di azione
  • Come lo posso fare?

  • Non vedere Android SDK e AVD Manager quando eseguire il command android tool
  • Carattere urdu in textview
  • differenza tra timer e alarmmanager
  • Risorse Android che converte in avviso di string TypedValue
  • OnClickListener - x, y posizione dell'evento?
  • methods getViewTypeCount e getItemViewType di ArrayAdapter
  • 2 Solutions collect form web for “Impostare diversi colors divisori a ciascun elemento nella vista elenco”

    Impostare il divisore in altezza a 0 e implementare una vista nel layout dell'elemento con l'altezza di 1 e modificarne il colore in base all'elemento dell'elenco each volta che la vista viene costruita.

    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> 

    Ecco come cambiare il colore nell'adattatore:

     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[] è un elenco dei colors che si desidera utilizzare.

    Di più su ViewHolder leggere qui .

    1. Separare l'elemento dell'elenco e l'intera list in xml
    2. Crea un'adattatore personalizzato per i tuoi elementi di elenco e crea l'istanza della tua list
    3. A seconda dei criteri desiderati, modificare il colore del divisore per each nuovo elemento aggiunto dall'adattatore all'elenco

    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 tua 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); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.