Android ListFragment选择器选择所有项目
我有一个ListFragment,我在我的活动中这样调用它:Android ListFragment选择器选择所有项目,android,android-layout,android-listview,android-listfragment,Android,Android Layout,Android Listview,Android Listfragment,我有一个ListFragment,我在我的活动中这样调用它: @Override protected void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); setTitle( getString(R.string.something) ); if ( savedInstanceState ==
@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>
@空的
@颜色/窗口背景
@样式/应用程序视图
4dp
@颜色/选择器颜色
帐篷
@颜色/列表项
@android:彩色/透明
颜色:
<color name="list_item">@android:color/white</color>
<color name="selector_color">#ffba00</color>
@android:color/white
#ffba00
但是,每当应用程序运行时,在我长按某个项目或尝试拖动之前,它看起来都很好。然后所有元素都被选中,看起来像这样,而不是只选择一个元素
所以问题是:如何使列表只选择一个元素而不是全部元素
任何帮助都将不胜感激。您需要使listSelector
@android:color/transparent
并将单个行视图的选择器设置为@color/selector\u color解决方案是实现一个选择器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>
<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>
... 您的布局项目
清单活动如下所示:
<activity android:name=".ui.CustomerListActivity" android:clearTaskOnLaunch="true" android:theme="@style/Theme.AppList">
最后,主题如下:
<?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>
<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
@颜色/列表项
@android:彩色/透明
然后,listview将按预期显示,元素的背景为白色,活动的背景为蓝色,元素之间有4dp的透明空间。也许我做得不对,所以我最好问一下:如何设置单个行视图的选择器??