4

我有一个 ListView,第一次显示它时,我想禁用它的一些项目。

为此,我制作了这个textorange_selected.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" 
          android:color="@color/medium_gray" />

    <item android:state_selected="true"
        android:color="@android:color/white" />

    <item android:state_focused="true"
        android:color="@android:color/white" />

    <item android:state_pressed="true"
        android:color="@android:color/white" />

    <item android:color="@color/lighter_orange" />
</selector>

我在一行的布局中使用它:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_height="20dp"
   android:gravity="left|center"
   android:layout_width="wrap_content"
   android:paddingLeft="5dp"
   android:paddingRight="5dp"
   android:background="@color/list_bg">

    <ImageView
       android:id="@+id/avatar"
       android:layout_width="48dp"
       android:layout_height="48dp"
       android:layout_marginTop="10dp"
       android:layout_alignParentLeft="true" />

    <LinearLayout
       android:orientation="vertical"
       android:layout_width="wrap_content"
       android:layout_height="48dp"
       android:layout_toRightOf="@+id/avatar"
       android:layout_marginLeft="10dp"
       android:layout_marginTop="5dp">


           <TextView android:id="@+id/listitem1"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_marginTop="2dp"
               android:textColor="@drawable/textblack_selected"
               android:textSize="18dp"
               android:textStyle="bold" />

           <TextView android:id="@+id/listitem2"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_marginLeft="40dp"
               android:textColor="@drawable/textorange_selected" />

    </LinearLayout>

    <ImageView
       android:id="@+id/arrowImage"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginTop="25dp"
       android:layout_alignParentRight="true"
       android:src="@drawable/arrow_selector" />

</RelativeLayout>

问题是它永远不会进入android:state_enabled="false"(那应该是该项目被禁用并且我将文本颜色设置为灰色的那一刻)。

为了禁用我在适配器中使用此代码的项目:

@Override
public boolean areAllItemsEnabled() {                    
    return false;
}

@Override
public boolean isEnabled(int position) {
    return position < 1;
}

我的错误在哪里?

4

2 回答 2

2

Selector 使用isEnabled()分配给它的 View 上的值,在本例中为RelativeLayout. 它不会调用isEnabled().Adapter

您将需要以下代码:

public View getView(int position, View convertView, ViewGroup parent) {
    RelativeLayout v = (RelativeLayout)LayoutInflater.from(parent.getContext())
            .inflate(R.layout.listitem_relativelayout, null);
    if(postion < 1) v.setEnabled(false);
于 2012-07-05T09:32:24.667 回答
1

问题是返回的启用状态isEnabled()不会自动转发到列表项的所有子视图。您需要做的是view.setEnabled()在适配器方法的末尾调用getView()以使您的选择器正常工作。

此外,请确保通过指定自身以及包装器android:duplicateParentState="true"将状态传递给后代。TextViewLinearLayout

于 2014-03-27T11:14:38.350 回答