ListView选择器颜色选择所有对象,而不是每个项目

时间:2015-08-21 08:36:44

标签: android listview android-listview colors selector

我已经完成了ListView并使用自定义适配器填充它,现在我想显示使用不同颜色选择的元素,因此我使用以下代码创建了drawer_list_selection.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@color/primaryDark" />
    <item android:state_activated="true" android:drawable="@color/primary" />
    <item android:drawable="@color/grey_soft" />
</selector>

然后,我将ListView背景设置为此文件:

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content"
    android:layout_height="match_parent" android:choiceMode="singleChoice"
    android:divider="@android:color/transparent" android:dividerHeight="0dp"
    tools:context=".NavigationDrawerFragment" android:id="@+id/section_list"
    android:background="@drawable/drawer_list_selector" />

我的问题是,当我按下一个部分(一个元素)时,整个ListView转动@color / primary并且激活的方法都不起作用。有解决方案吗也许是我的适配器的问题?这是btw:

public class adaptadorLista extends ArrayAdapter<Secciones>{
    public adaptadorLista(Context context, Secciones[] section){
        super(context,0,section);
    }

    public View getView(int position, View convertView, ViewGroup parent){
        LayoutInflater inflater = LayoutInflater.from(getContext());
        View item = inflater.inflate(R.layout.fragment_main, null);

        ImageView img= (ImageView) item.findViewById(R.id.imageView_section);
        img.setImageResource(section[position].getIcon());
        TextView txt_section = (TextView) item.findViewById(R.id.section_label);
        Typeface tf = Typeface.createFromAsset(getActivity().getAssets(),"fonts/Jaapokki-Regular.otf");
        txt_section.setTypeface(tf);
        txt_section.setText(section[position].getSec());
        return (item);
    }
}

View的自定义xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:background="@drawable/drawer_list_selector"
    tools:context=".MainActivity$PlaceholderFragment"
    >
    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="16dp" android:background="@drawable/drawer_list_selector">
        <TableRow android:layout_gravity="center_horizontal|center_vertical"
            android:layout_width="fill_parent">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal|center_vertical"
                android:layout_marginRight="5sp"
                android:id="@+id/imageView_section" android:src="@drawable/ic_d" android:scaleType="fitCenter"
                android:maxHeight="20dp" android:maxWidth="20dp" android:adjustViewBounds="true"/>
            <TextView android:id="@+id/section_label" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:text="hi" android:textSize="20sp"
                android:textColor="#000"
            />
        </TableRow>
    </TableLayout>
</LinearLayout>

2 个答案:

答案 0 :(得分:1)

希望您的适配器视图具有父布局。

所以将android:background="@drawable/drawer_list_selector"赋予布局或ImageView或TextView。

如果您在布局中有ImageView和TextView,那么您可以设置该布局的背景。

希望它对你有所帮助。

答案 1 :(得分:0)

哟需要删除这些行。

<item android:state_activated="true" android:drawable="@color/primary" />
android:background="@drawable/list_selector"

并设置列表选择器而不是背景

android:listSelector="@drawable/yourlist_selector"

并在xml中的listView中设置属性android:drawSelectorOnTop="true"