2012-10-03 16 views
6

ビューにはそれぞれ独自のActionModeが必要なウィジェットがいくつかあります。ユーザーがアクションバーの外をタップすると、ActionModeが自動的に閉じないことがわかります。したがって、ユーザーはあるコントロールのActionModeを開始し、別のコントロールをタップ(私の場合はlongclick)し、最初のアクションバーの上に2番目のActionBarをスタックすることは簡単に可能です。これはプログラミングロジックを混乱させます。actionmodeが既に存在するかどうかを検出する方法

私は現在のActionModeをアクティビティレベルのメンバ変数で追跡し、新しいものが必要な場合は現在のものを閉じます。どのように、これは私のコードを読んで維持するのが面倒です。さらに、ユーザーがアクションバーの外に何かをタップするとすぐにそれを解除することをお勧めします。

これを処理するには良い方法がありますか?

答えて

6

私は以前この問題の解決策を探していましたが、グローバル変数に現在のアクションモードの状態を保存せずに追跡できないことがわかっています。しかし、私は、適切な名前の変数があなたのコードを乱雑にするとは思わない。

+0

ただし、ユーザーがサブクラス化していないEditTextをクリックしたとします。今不適切なアクションバーをどうやって解消しますか? –

+0

私があなたを理解していれば、実現したグローバル変数 'ActionModemMode;'を 'onCreateActionMode(...)'メソッドで現在のアクションモードで満たしてから、 'mMode .finish() '現在のアクションモードを終了する必要があるとき – user1049280

+0

そうです、私はそれを取得します。しかし、どのようにfinish()を呼び出すべきかを知っていますか?つまり、ユーザーがクリックできる場所が多数あります。すべてのオブジェクトをサブクラス化し、MotionEvent.ACTION_DOWNを確認してからfinish()を呼び出しますか?それは非常にエラーを起こしやすいでしょう、これらのビットのコードは、場所のいたるところにひっくり返ります。 –

関連する問題