Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Establecimiento de diferentes colores de divisor para cada elemento en la vista de lista

Quiero tener una lista con divisores diferentes entre los elementos de la lista. He utilizado este código para definir un divisor blanco con altura 1:

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

Sin embargo, establece el divisor para que todo el elemento sea blanco, y sólo quiero que algunos de ellos sean blancos y el otro en diferentes colores.

¿Cómo puedo hacer eso?

2 Solutions collect form web for “Establecimiento de diferentes colores de divisor para cada elemento en la vista de lista”

Establezca el divisor en altura a 0 e implemente una vista en el diseño de elementos con la altura de 1 y cambie su color según el elemento de lista cada vez que se crea la vista.

He aquí un ejemplo de diseño 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> 

Y así cambia el color en el adaptador:

 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; } } 

Donde int color[] es una lista de los colores que desea utilizar.

Más acerca de ViewHolder leer aquí .

  1. Separa el elemento de lista y toda tu lista en xml
  2. Cree un adaptador personalizado para los elementos de la lista e instancie su lista
  3. Dependiendo de los criterios que desee cambiar el color del divisor para cada nuevo elemento que agregue desde el adaptador a la lista

Ejemplo:

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; } } 

En su actividad

  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); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.