2

在我的应用程序中,我有一个带有适配器的海关 Listview。在我的列表视图中,我添加了一个带有focusable=false的复选框,以确保 listItem 仍然是可聚焦的。在OnCheckedChangeListener上,我调用list.setItemChecked以确保它触发上下文菜单。When a row is selected (not with the checkbox) it's starting an activity. (编辑行内容)

在我的活动中,我有这些行以在选择项目时启动上下文菜单(使用复选框)

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 代码可能会更改,并且可能与问题无关

4

1 回答 1

1

我自己修好了。我不知道这是否可行,但它正在工作。

我在用着

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 的更清洁的方法),然后发布它,它可能会对其他人有所帮助。

于 2013-01-24T04:46:20.793 回答