【问题标题】:ListFragment selector selects all itemsListFragment 选择器选择所有项目
【发布时间】:2012-04-16 19:37:29
【问题描述】:

我有这个 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();
        }
        
    }

在我的 Fragment 上我设置了单选:

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 个元素而不是全部。

任何帮助将不胜感激。

【问题讨论】:

    标签: android android-layout android-listview android-listfragment


    【解决方案1】:

    您需要将 listSelector 设为 @android:color/transparent 并将单个行视图的选择器设置为 @color/selector_color

    【讨论】:

    • 也许我做错了,所以我最好问一下:如何设置单个行视图的选择器??
    【解决方案2】:

    这个问题的解决方案是实现一个选择器 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 透明空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-03
      • 1970-01-01
      • 2015-02-13
      • 2011-03-27
      • 1970-01-01
      • 2023-03-23
      • 2022-11-23
      • 1970-01-01
      相关资源
      最近更新 更多