2

私のアプリには、アダプター付きの税関リストビューがあります。リストビューで、listItemが引き続きフォーカス可能であることを確認するためにfocusable =falseのチェックボックスを追加しました。OnCheckedChangeListenerで、list.setItemCheckedを呼び出して、コンテキストメニューがトリガーされることを確認します。行が選択されると(チェックボックスがない場合)、アクティビティが開始されます。(行の内容を編集するには)

私のアクティビティでは、アイテムが選択されたときにコンテキストメニューを開始するためのこれらの行があります(チェックボックス付き)

transactionList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
transactionList.setMultiChoiceModeListener(multiChoiceMode);

問題は、コンテキストメニューが表示されたときにCHOICE_MODE_MULTIPLE_MODALが原因で、行を再度クリックできないためです。行をクリックすると、行のみが選択または選択解除されます。

CHOICE_MODE_MULTIPLE_MODALの代わりにCHOICE_MODE_MULTIPLEを使用して自分でアクションを開始することを考えていましたが、自分がやりたいことを行うためのより良い方法があるかどうかわかりません。

実際、私が欲しいのは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 に答える