web-dev-qa-db-ja.com

選択したリストビューアイテムの色を変更する

押したときにリスト項目の色を変更したい

そのために私は以下のようにしました、

list_item_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android"> 

    Selected 
  <item 
    Android:state_focused="true" 
    Android:state_selected="false" 
    Android:drawable="@drawable/list_focused"/> 

  Pressed
  <item 
    Android:state_selected="true" 
    Android:state_focused="false"
    Android:drawable="@drawable/list_selected" />  

</selector> 

以下のようにcolors.xmlに色を設定しました、

 <drawable name="list_focused">#36C170</drawable>
  <drawable name="list_selected">#9EC136</drawable>

と私のListViewに私はこのように書いた、

<ListView
            Android:id="@+id/list_centers_complete"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content" 
            Android:cacheColorHint="@Android:color/transparent"
            Android:listSelector="@drawable/list_item_selector" />

しかし、リストアイテムをクリックすると、リストアイテムだけでなく、背景色全体が変更されます。

どうすればこれを解決できますか?何か方法はありますか?

ありがとうございました

11
Jyosna

適用"@drawable/list_item_selector" to the (row of that list(List item)) not to the List ....

リスト項目(リスト行)のようなもの。

<?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="fill_parent"
    Android:orientation="horizontal"
    Android:background="@drawable/list_item_selector">
        <TextView       Android:id="@+id/textForList"
        Android:layout_height="fill_parent"
        Android:layout_width="wrap_content"
        Android:padding="10sp"  />
.
.
.
</LinearLayout>

list_item_selector.xml

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <item Android:state_focused="true">
    <shape>
        <solid Android:color="#66FFFFFF" />
    </shape>
</item>
    <item>
    <shape>
        <solid Android:color="#FF666666" />
    </shape>
</item>

</selector>
29
user370305

リストビュー自体ではなく、セレクターを行に設定する必要があります。

3
Sudarshan Bhat

カスタムアダプターを試すと、アイテムを完全に制御し、デフォルトのアイテムを選択して設定するのにも役立ちます。 listView XMLとitem XMLには特別な設定はありません。

public class ListAdapter extends ArrayAdapter<MyObj> {

private final int layoutInflater;
private Context context;
private  List<MyObj> items;
private int mSelectedItem = 0;
private int TAG_UNSELECTED = 0;
private int TAG_SELECTED = 1;

public ListAdapter(Context context, int resource, List<MyObj> items) {
    super(context, resource, items);
    this.context = context;
    this.layoutInflater = resource;
    this.items = items;
}

public void selectItem(int position) {
    mSelectedItem = position;
    notifyDataSetChanged();
}


@Override
public int getViewTypeCount() {
    return 2;
}

@Override
public int getItemViewType(int position) {
    return position == mSelectedItem ? TAG_SELECTED : TAG_UNSELECTED;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View v = convertView;
    if (v == null) {
        LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(layoutInflater, null);
    }

    MyObj myObj = items.get(position);
    TextView textView = (TextView) v.findViewById(R.id.title);
    textView.setText(myObj.title);

    int type = getItemViewType(position);
    if(type == TAG_SELECTED) {
        v.setBackgroundColor(Color.parseColor("#1da7ff"));
        textView.setTextColor(Color.parseColor("#ffffff"));
    } else {
        v.setBackgroundColor(Color.parseColor("#f8f8f8"));
        textView.setTextColor(Color.parseColor("#474747"));
    }

    return v;
}

}

次に、あなたの活動で:

            ListView listView = (ListView) findViewById(R.id.list_view);
            ListAdapter adapter = new ListAdapter(mContext, R.layout.item_layout, list);
            listView.setAdapter(adapter);
            adapter.selectItem(0); // Default selected item

            // Get selected item and update its background
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                    adapter.selectItem(position);
                }
            });
1
karenms
<item Android:state_activated="true">
  <shape Android:shape="rectangle">
    <solid Android:color="#333333" />
    <padding Android:left="5dp" Android:right="5dp" />
  </shape></item>
<item><shape Android:shape="rectangle">
        <solid Android:color="#222222" />
    </shape></item>
1
Ramkailash