1

わかりました、通常、私は質問者ではありませんが、グーグルで問題を解決できませんでした。それで、私の最初の StackOverflow-Question です。

いくつかのフラグメントをトリガーするナビゲーション ドロワーを使用したアクティビティがあります。これらのフラグメントには独自のサブフラグメントがあります。

ユーザーがアプリの奥に進むと、「ハンバーガー」アイコンがアップキャレットに置き換えられます。キャレットまたはバックキーを押すと、サブフラグメントがバックスタックからポップされ、ハンバーガー アイコンが戻ります。

これは、サブフラグメントで何が起こるかです:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        // Called when the up caret in actionbar is pressed
        getActivity().onBackPressed();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

アクティビティでは:

@Override
public void onBackPressed() {
    // turn on the Navigation Drawer image
    FragmentManager fragmentManager = getSupportFragmentManager();

    if (fragmentManager.getBackStackEntryCount () != 0)
        mDrawerToggle.setDrawerIndicatorEnabled(true);
    }
    super.onBackPressed();
}   

ここまでは順調ですね。

サブフラグメントを深く掘り下げると、問題が発生します。サブフラグメントにはリストと onLongClickItem があり、ユーザーがそれらのリスト項目を変更できるコンテキスト アクションバーが表示されます。

そのコンテキスト アクションバーを開いて戻るボタンを押すと、(予想どおり) 閉じるだけでなく、アップキャレットが drawer-hamburger-icon-thingie に変更されます。もちろん、なぜこれが起こるのかは理解していますが、クリーンな解決策がわかりません (またはオンラインで見つけることができませんでした)。

私は間違った方法で進んでいますか、それともここで簡単な手順を見逃しているだけですか? setDrawerIndicatorEnabled を onBackStackChangedListener に移動し、タグ付けされた backStackItem をリッスンする方法に沿って何かを考えていました。

しかし、私は考えました。すべてのコードを台無しにし始める前に、いくつかの赤ちゃんの一歩を踏み出して、オンラインで質問してみましょう。

ありがとう

4

1 に答える 1

0

以下の最初のテキストは質問自体の編集でしたが、誰も私の質問に答えたがらないようだったので、回答として追加したので、同様の質問を持っている人はおそらくこれで助けられます.

誰かがより良い答えを持っていても、私はまだよりクリーンなソリューションに興味があります.


わかりました、私は自分の質問を解決することができましたが、満足しているかどうかはわかりません。私がしたことは、次のように、onCreateActionMode のバックスタックに偽のエントリを追加することでした。

@Override
public boolean onCreateActionMode(ActionMode actionmode, Menu menu) {
    MenuInflater inflater = actionmode.getMenuInflater();
    inflater.inflate(R.menu.task_contextual_menu, menu);

    getActivity().getSupportFragmentManager()
                .beginTransaction()
                .addToBackStack(null)
                .add(new Fragment(), FAKE_BACKSTACK_ENTRY)
                .commit();

    return true;
}

onDestroyActionMode でそれをポップし、 onBackPressed をチェックインする代わりに(fragmentManager.getBackStackEntryCount () != 0)、 をチェックし(fragmentManager.getBackStackEntryCount () == 1)ます。

私は回避策を誇りに思っていますが、それが最もクリーンなソリューションではないことに気づきました...

于 2014-03-26T11:33:22.193 に答える