5

Fragments私は何年も Android を使用してきましたが、実際のプロジェクトで使用するのはこれが初めてです。だから私は少し混乱しています:-P

このアプリにはNavigationDrawer4 つのメイン セクションがあります。に置き換えるコンテンツを持つActivityaを持つメインを 1 つだけ使用しています。のオプションが選択されると、 をインスタンス化し、そのコンテンツに配置します。私はこのようなことをしています:LayoutViewFragmentsNavigationDrawerFragmentView

    private class DrawerItemClickListener implements ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        selectItem(position);
    }
}

public static int drawerSelectedOption = 0;
private void selectItem(int position) {
    drawerSelectedOption = position;
    Fragment fragment = null;
    switch (position) {
        case 0:
            fragment = new StoresFragment();
            break;
        case 1:
            //promos
        case 2:
            fragment = new TransactionsFragment();
            break;
        case 3:
            break;
        case 4:
            fragment = new Settings();
            break;
    }

    FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();

    // update selected item and title, then close the drawer
    mDrawerList.setItemChecked(position, true);
    setTitle(mSectionTitles[position]);
    mDrawerLayout.closeDrawer(mDrawerList);
}

Fragments各 main 内からさらにプッシュされますNavigationDrawer Fragments。したがって、メインの「画面」のそれぞれには、以下に示すように内部にいくつかのサブ画面があります。

Drawer __ Fragment 1.0  -- Fragment 1.1 -- Fragment 1.2
      |__ Fragment 2.0  -- Fragment 2.1 -- Fragment 2.2

Fragments次のように、以前のメニューからこれらの内部をプッシュしていFragment ActionBarます。

FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        OrderCreateFragment fragment = new OrderCreateFragment();
        fragmentTransaction.add(R.id.content_frame, fragment);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();

私はいくつかの問題に直面しているため、このアプローチに関するアドバイスを探しています。

  1. ActionBarメニュー項目を適切に管理する方法さえ知りません。すべてFragmentに独自のメニューがあり、バーにスタックすることがあります (つまり、Android の戻るキーで戻るのではなく、をFragmentsタップして切り替えた場合)。NavigationDrawer
  2. StackBackオプションの 1 つを選択するときに完全にポップする必要がありNavigationDrawerます。どういうわけかスタックに保持されているため、私のActionBar乱雑なアイテムはこれに関連していると思われます。Fragments

StackBackそれで、これが適切なアプローチであるかどうか、および との問題に対処する方法について、誰か親切にアドバイスしてもらえますActionBarか?

UPDATE : selectItem メソッドでスタック全体をクリアすると、2 つの主な問題が解決したようです。私はまだこのアプローチについての意見を聞くことに興味がありますが。

4

2 に答える 2

0

まあ、最善の方法はアプリケーションのニーズに依存すると思います。2つのシナリオを考える

A-アプリには、ナビゲーションドロワーと、ネストされた/深いナビゲーションを備えた複数のアクティビティが必要です。次に、フレームレイアウトとナビゲーションドロワーを持つベースアクティビティを用意するのが最善の方法です。すべてのアクティビティは、この基本アクティビティから拡張/継承されます。そして、アクティビティごとにそれぞれのレイアウトを膨張させ、baseActivity のフレームレイアウト コンテナーにプログラムで追加します。
バックスタックのナビゲーションはより簡単です。

B - アプリには、navigationdrawer と 1 層のナビゲーションのみが必要です。次に、ナビゲーション ドロワーを持つ単一のアクティビティでフラグメントを動的に追加および置換するという概念を使用できます。

于 2014-10-01T13:13:02.200 に答える