2011-07-19 18 views
3

スコープ: - overriden ArrayAdapterを使用します。 - セレクタを使用。 - アイテムを無効にするためにisEnabledを使用します。セレクタおよびisEnabled()でリストビュー項目を無効にする

目的: - 一部のリスト項目を無効にし、セレクタを介して無効な状態ビューを読み込みます。

問題: - しかし、無効なアイテム(焦点の定まらない、focuesdと押された状態のためのカスタムビュー、セレクタ)すべての作品は、無効な状態のためのセレクタを使用しないでください。の調査

:(は!)私はリストビュー階層ビューアでのいくつかの項目を無効にするISENABLEDを使用する場合は、無効なアイテムは、unfocusable unclickableが、有効であることを示しています。

バグか何かが欠落していますか?

P.S.実際には、ドキュメントはisEnabledはリスト項目に対してsetEnabled(false)を実行しないと言うと、それはディバイダ(?)オブジェクトになります。 P.P.Sまた、ifEnabled(false)としてビューを(getViewで)設定するためにif-statementを使用しようとしました。しかし、それは集中したアイテムのためだけに機能しますか?

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- Disabled --> 
    <item 
     android:state_enabled="false" 
     android:textColor="@color/greyDark" 
     android:drawable="@drawable/list_item_disabled" /> 
    <!-- Pressed --> 
    <item 
     android:state_enabled="true" 
     android:state_pressed="true" 
     android:textColor="@android:color/white" 
     android:drawable="@drawable/list_item_pressed" /> 
    <!-- Focused --> 
    <item 
     android:state_enabled="true" 
     android:state_focused="true" 
     android:textColor="@android:color/white" 
     android:drawable="@drawable/list_item_focused" /> 
    <!-- Default --> 
    <item 
     android:state_enabled="true" 
     android:drawable="@drawable/list_item_unfocused" /> 
</selector> 

答えて

1

ハック: が無効になっアイテムのロジックをチェックして、別のレイアウトでビューを膨らませるgetViewメソッドを使用し

私のセレクタは次のようになります。 isEnabledは依然として便利です。

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = (LayoutInflater) mContext 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View row; 

    if (mListItem[position].isEnabled() == false) row = inflater.inflate(
      R.layout.list_row_disabled, null); 
    else { 
     row = inflater.inflate(R.layout.list_row, null); 
     // set right extensible icon 
     if (mListItem[position].getType()) { 
      ImageView ic_arrow = (ImageView) row.findViewById(R.id.list_row_arrow); 
      ic_arrow.setImageResource(R.drawable.ic_arrow_right); 
     } 
    } 
    // set left icon 
    ImageView ic_item = (ImageView) row.findViewById(R.id.list_row_icon); 
    ic_item.setImageResource(mListItem[position].getIcon()); 
    // blend icon if item is disabled 
    if (mListItem[position].isEnabled() == false) 
     ic_item.setColorFilter(0x99D0D0D0,Mode.SRC_ATOP); // make icons look grayer 

    // set title text 
    TextView txvTitle = (TextView) row.findViewById(R.id.list_row_title); 
    txvTitle.setText(mListItem[position].getTitle()); 

    return row; 
} 

@Override 
public boolean isEnabled(int position) { 
    return mListItem[position].isEnabled(); 
} 
9

アダプタ内のisEnabled()関数は、アイテムをフォーカス不能にし、クリッキングできないようにします。 adapter.getView()の最後にview.setEnabled()と電話をかけて、セレクタを機能させる必要があります。

また、親ビューで子孫に有効状態を渡すには、xmlファイルの子ビューに属性android:duplicateParentState="true"を指定する必要があります。

+0

今後の読者へ:私のやっていることをやってはいけないし、XMLレイアウトファイルにネストされたレイアウトがないため、最初の部分だけが必要だと仮定してください! – cqcallaw

関連する問題