我有一个ListView子类,我允许在上下文操作栏(CAB)处于活动状态时进行选择.CAB被设置为onItemLongClick事件的回调:
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// Inflate a menu resource providing context menu items
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(context_menu, menu);
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
return true;
}
Run Code Online (Sandbox Code Playgroud)
这很好,ListView按预期工作,当前选定的项目在触摸时保持突出显示.
当我关闭CAB时,我希望ListView恢复正常(即触摸模式).问题是最后选择的项目会无限期地突出显示,无论我尝试清除它的方法是什么:
public void onDestroyActionMode(ActionMode mode) {
//Unselect any rows
ListView lv = getListView();
lv.clearChoices(); // Has no effect
lv.setChoiceMode(ListView.CHOICE_MODE_NONE); // Has no effect on the highlighted item
lv.setFocusable(false); // Has no effect
lv.setSelection(0); // Has no effect
mActionMode = null;
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?
看完并试着好几天后,我放弃了并寻求帮助.
<edit>我正在使用ActionBarSherlock.</ edit>
我想要实现的目标:
一个ListView,每行有一个自定义布局,用户可以在其中选择多个列表项.选定的列表项应具有不同的背景颜色.如果至少选择了一个项目,则应显示上下文操作栏(CAB).它应该或多或少看起来像GMail应用程序中的多个电子邮件选择.唯一的区别是,在gmail应用程序中,通过单击行的复选框来完成选择,而我不希望有一个复选框,但无论用户单击的位置,都应该选择一行.

我尝试过: 在本教程中,使用Checkable行布局和一些逻辑来在切换检查状态时更改背景颜色,我得到了一切正常工作,除了我无法在ListView上注册像OnItemClickListener这样的点击监听器来显示CAB .既没有为每一行View提供点击监听器也有帮助,因为这阻止了更改所选项目的背景颜色.我也尝试将MultiChoiceModeListener添加到ListView中
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setMultiChoiceModeListener(new MultiChoiceModeListener() { //.. });
Run Code Online (Sandbox Code Playgroud)
结果相同,没有背景颜色变化.
我在寻找:提示或教程或示例代码如何做到这一点.如果您需要一些代码片段来提供帮助,请告诉我们.
在尝试遵循Android设计指南时,我遇到了一个小小的困境.
我希望有一个项目列表,我可以长按几个(多选),然后对它们执行批量操作.
设计指南建议使用Contextual Action Bar,这听起来就像我想到的那样.问题是,我正在努力保持与API 7的兼容性(由于我的手机目前是2.3.3).
我正在使用ActionBarSherlock获取其他操作栏的东西,但我似乎无法弄清楚如何启动它以启动上下文操作栏,也没有弄清楚如何将任意按钮添加到ABS中的ActionBar.我看到你可以做标签,所以也许这就是答案,但是因为我试图允许多选,我不想拥有正常的模态上下文菜单.
所以,我正在阅读这个早先的问题,想知道如何让我点击列表中的项目来执行一个操作,或者长按该项目以切换到ActionMode,我可以在其中选择多个项目并使用ActionBar执行某些操作到那些项目.但是,我对这个答案有疑问.具体来说,我将其实现为SherlockListFragment(使用ActionBarSherlock).但是,当我声明一个新的MultiChoiceModeListener时,Eclipse会抛出一些编译错误.
Description Resource Path Location Type
Cannot override the final method from SherlockListFragment DateTimeListFragment.java /path/to/my/project line 127 Java Problem
The method inflate(int, Menu) in the type MenuInflater is not applicable for the arguments (int, Menu) DateTimeListFragment.java /path/to/my/project line 125 Java Problem
Run Code Online (Sandbox Code Playgroud)
当我删除MultiChoiceModeListener时,这些消失了.我不知道是什么原因造成的,因为我知道并没有什么奇怪的事情发生.
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
//super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.alarmsmenu, menu); //line 125
}
public boolean onOptionsItemSelected(MenuItem Item) //line 127
{
switch(Item.getItemId())
{
case R.id.addAlarm:
addAlarm();
return true;
case R.id.editAlarms:
return true; …Run Code Online (Sandbox Code Playgroud) android actionbarsherlock android-actionbar android-listfragment
我有Android应用程序列表视图,选择模式设置为多选模式.
此列表中的项目定义为相对布局.
如何在选择项目时更改项目的背景?
项目xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
...
android:checkable="true"
android:background="@drawable/my_item_background"
Run Code Online (Sandbox Code Playgroud)
我的项目背景xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@color/mycolor1" android:state_selected="true"/>
<item android:drawable="@color/mycolor2" android:state_checked="true"/>
<item android:drawable="@android:color/black"/>
</selector>
Run Code Online (Sandbox Code Playgroud)
物品的背景总是黑色的.