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 に答える