Настройка цвета каждого разделителя на каждый элемент в виде списка

Я хочу иметь список с разными разделителями между элементами списка. Я использовал этот код для определения белого делителя с высотой 1:

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

Однако он устанавливает разделитель для того, чтобы весь элемент был белым, и я хочу, чтобы только некоторые из них были белыми, а другие – разными цветами.

Как я могу это сделать?

Установите делитель на высоту до 0 и реализуйте представление в макете вашего элемента с высотой 1 и меняйте свой цвет на основе элемента списка каждый раз, когда создается представление.

Вот пример 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> 1 <?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> 

И вот как вы меняете цвет в адаптере:

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

Где int color[] – это список цветов, которые вы хотите использовать.

Подробнее о ViewHolder читайте здесь .

  1. Отделите свой элемент списка и весь список в xml
  2. Создайте пользовательский адаптер для своих элементов списка и создайте экземпляр своего списка.
  3. В зависимости от критериев, которые вы хотите изменить, цвет делителя для каждого нового элемента, который вы добавляете из адаптера в список

Пример:

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

В вашей деятельности

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