8

リスト要素間に異なる仕切りがあるリストが必要です。このコードを使用して、高さ 1 の白い仕切りを定義しました。

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

しかし、それはすべての要素の仕切りを白に設定し、それらの一部だけを白にし、他の要素を別の色にしたい.

どうやってやるの?

4

2 に答える 2

9

仕切りを高さ 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>

そして、これはアダプタの色を変更する方法です:

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 の詳細については、こちらを参照してください。

于 2012-10-17T12:42:28.940 に答える
2
  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>

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);
于 2012-10-17T12:45:57.923 に答える