37

ActionModeグリッド内のアイテムを選択するために使用します。問題は、[完了] ボタンが正確にクリックされたかどうかを認識できないことです。ActionMode私にできるのは、それが終わったことを知ることだけです。ただし、戻るを押すと終了しActionModeます。望ましい動作は、 [完了] クリックで選択を受け入れ、[戻る] を押すと終了ActionModeすることです。

使用してみましたが、 DoneボタンActionMode.setCustomView()には影響しません。ActionModeの開始時には呼び出されません。Activity.onBackPressed()

私が見つけた 1 つの解決策は、ActionBarSherlock を使用して [完了] ボタンを手動で取得することです。

View closeButton = findViewById(R.id.abs__action_mode_close_button); 

ただし、4.xa ではネイティブ アクション バーが使用されるため、Android 2.x-3.x でのみ機能します。

4

3 に答える 3

39

これは実装固有であり、非常に非標準であるため、これを行わないでください。

onDestroyActionModeアクションモードが解除されたときのコールバックを使用できます。

于 2012-07-25T06:14:11.413 に答える
21

解決策は次のとおりです。

ActionMode mMode = MyActivityClass.this.startActionMode(some implementation);
int doneButtonId = Resources.getSystem().getIdentifier("action_mode_close_button", "id", "android");
View doneButton = MyActivityClass.this.findViewById(doneButtonId);
doneButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // do whatever you want 
        // in android source code it's calling mMode.finish();
    }
});
于 2012-12-30T12:32:48.183 に答える
11

これが私の実装です。これは適切なハックですが、機能し、ActionMode DONE がクリックされたときに特定のことを行う代わりの方法を実際に見つけることができません。このイベントをよりエレガントに捉えることができないのは、本当に奇妙だと思います。

これを少し醜くするための提案は大歓迎です...

私の活動では..

boolean mActionModeIsActive = false;
boolean mBackWasPressedInActionMode = false;

@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
    mBackWasPressedInActionMode = mActionModeIsActive && event.getKeyCode() == KeyEvent.KEYCODE_BACK;
    return super.dispatchKeyEvent(event);
}

@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu)
{
    mActionModeIsActive = true;
    return true;
}

@Override
public void onDestroyActionMode(ActionMode mode)
{
    mActionModeIsActive = false;

    if (!mBackWasPressedInActionMode)
        onActionModeDoneClick();

    mBackWasPressedInActionMode = false;
}

public void onActionModeDoneClick();
{
    // Do something here.
}

アクティビティで Fragments を使用している場合、このコードの一部は Fragment に、残りの部分は Activity に含まれている必要があります。

@JakeWharton (および他の ActionBarSherlock ユーザー) 旅行中にこれを見た場合。ABSを現在のプロジェクトにまだ統合していないため、上記がABSと互換性があるかどうかを知りたいです。

于 2013-03-28T20:57:13.197 に答える