1

この ListFragment があり、Activity で次のように呼び出しています。

@Override
    protected void onCreate( Bundle savedInstanceState ) {
        
        super.onCreate( savedInstanceState );
        setTitle( getString(R.string.something) );
        
        if ( savedInstanceState == null ) {
            final FragmentManager fm = getSupportFragmentManager();
            final FragmentTransaction ft = fm.beginTransaction();
            final Fragment f = CustomerListFragment.newInstance();
            ft.add( android.R.id.content, f, FRAG_TAG_CUSTOMER_LIST );
            ft.commit();
        }
        
    }

私のフラグメントでは、単一の選択肢を設定しました:

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);

私のマニフェストでは、スタイルを設定しました:

<activity android:name=".ui.CustomerListActivity" android:clearTaskOnLaunch="true" android:theme="@style/Theme.AppList">

テーマは次のように定義されています。

<style name="Theme.AppList">
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowBackground">@color/window_background</item>
        <item name="android:listViewStyle">@style/AppListView</item>
    </style>

    <style name="AppListView" parent="@android:style/Widget.ListView.White">
        <item name="android:dividerHeight">4dp</item>
        <item name="android:listSelector">@color/selector_color</item>
        <item name="android:ellipsize">marquee</item>
        <item name="android:cacheColorHint">@color/list_item</item>
        <item name="android:divider">@android:color/transparent</item>
    </style>

そして色:

<color name="list_item">@android:color/white</color>
    <color name="selector_color">#ffba00</color>

ただし、アプリが実行されるたびに、アイテムを長押しするかドラッグしようとするまでは問題ないように見えます。次に、1 つの要素のみを選択するのではなく、すべての要素が選択され、このように表示されます。

問題は、すべての要素ではなく 1 つの要素のみを選択するようにリストを作成するにはどうすればよいかということです。

ここに画像の説明を入力

どんな助けでも大歓迎です。

4

2 に答える 2

0

これに対する解決策は、リスト項目のすべての状態を追加したセレクター 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="@drawable/bg_list_item_selected"></item>  <!-- pressed -->    
<item android:state_focused="true" android:drawable="@drawable/bg_list_item_selected"/>         <!-- focused -->
<item android:drawable="@drawable/bg_list_item"/>       <!-- default -->
</selector>

セレクターのドローアブル状態には、9 つ​​のパッチ イメージがあります。次に、行を定義した XML で、次のようにレイアウト背景をセレクターとして設定しました。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:orientation="vertical"
    android:paddingLeft="@dimen/space_screen_borders"
    android:paddingRight="@dimen/space_screen_borders"
    android:background="@drawable/custom_selector" 
    > 
    ... your layout items 
</LinearLayout>

マニフェスト アクティビティは次のとおりです。

<activity android:name=".ui.CustomerListActivity" android:clearTaskOnLaunch="true" android:theme="@style/Theme.AppList">

最後にテーマは次のとおりです。

<style name="Theme.AppList">
   <item name="android:windowContentOverlay">@null</item>
   <item name="android:windowBackground">@color/window_background</item>
   <item name="android:listViewStyle">@style/AppListView</item>
</style>
<style name="AppListView" parent="@android:style/Widget.ListView.White">
    <item name="android:dividerHeight">4dp</item>
    <!--item name="android:background">@color/</item-->
    <item name="android:cacheColorHint">@color/list_item</item>
    <item name="android:divider">@android:color/transparent</item>
</style>

リストビューは、要素の白い背景とアクティビティの青い背景、および要素間の4dpの透明なスペースで意図したとおりに表示されます。

于 2012-04-17T14:53:07.140 に答える
0

listSelector を作成し@android:color/transparent、個々の行ビューのセレクターを@color/selector_color

于 2012-04-16T19:43:19.963 に答える