在我的应用程序中,我具有带有适配器的海关Listview。在我的列表视图中,我添加了一个带有focusable = false的复选框,以确保listItem仍可聚焦。在OnCheckedChangeListener上,我调用list.setItemChecked以确保它触发了上下文菜单。选中某行(不带复选框)后,它将开始一个活动。 (编辑行内容)
在我的活动中,当选中一个项目时(带有复选框),我有以下几行可启动上下文菜单
transactionList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
transactionList.setMultiChoiceModeListener(multiChoiceMode);
问题是由于显示了上下文菜单时CHOICE_MODE_MULTIPLE_MODAL,我无法再次单击行。当我单击行时,它仅选择或取消选择行。
我当时正在考虑使用CHOICE_MODE_MULTIPLE而不是CHOICE_MODE_MULTIPLE_MODAL自己开始操作,但是我不知道是否有更好的方法来做我想做的事情。
实际上,我想要的就像Gmail应用程序一样。您可以选择行以执行自定义操作(删除,共享等),但是您仍然可以单击行以查看电子邮件。 (即使弹出了上下文菜单)
提前致谢 !
附言英语不是我的母语,但我敢肯定,您会理解我的意思。 (因此,对于英语错误,敬请原谅)
编辑添加了一些代码,但是我只想了解最好的方法。我知道这段代码使用了一半的旧方法,其中上下文菜单打开时您无法单击一行,而重构的一半是我手动触发操作栏所做的
http://pastebin.com/Tig0qYcN
顺便说一句,我的代码在github上
适配器:https://github.com/Dalto/PersonalBankManager/blob/master/PersonalBankManager/src/org/madduck/personalbankmanager/model/adapter/TransactionAdapter.java
活动:https:// github [DOT] com / Dalto / PersonalBankManager / blob / master / PersonalBankManager / src / org / madduck / personalbankmanager / AccountFragment.java
注意我的github代码可能会更改,并且可能与问题无关
最佳答案
我自己修好了。我不知道这是怎么做的,但它正在起作用。
我在用着
transactionList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
代替
transactionList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
并在选中复选框时添加了此代码
if (transactionAdapter.countSelected() > 0) {
if (actionMode == null) {
actionMode = getActivity().startActionMode(multiChoiceMode);
}
NumberFormat amountFormat = NumberFormat.getCurrencyInstance();
actionMode.setTitle(amountFormat.format(transactionAdapter.getTotalAmountSelected()));
} else if (transactionAdapter.countSelected() == 0 && actionMode != null) {
actionMode.finish();
}
如果您喜欢这里,我在github上所做的提交:https://github.com/Dalto/PersonalBankManager/commit/b6f46f7261ae2eef1f7b6fb2d2258a0da1779211
如果有人找到了更好的方法(我的意思是说使用Android API是一种更清洁的方法),然后再发布它,则可能会对其他人有所帮助。