这是使用Android Fragments和NavigationDrawer的正确方式吗?

5
尽管我已经多年使用Android,但这是我第一次在实际项目中使用Fragments,所以我有点困惑:-P
该应用程序具有带有4个主要部分的NavigationDrawer。我只使用一个主Activity,其中包含一个具有内容ViewLayout,我将其替换为Fragments。当选择NavigationDrawer中的选项时,我实例化一个Fragment并将其放入该内容View中。我正在执行类似于以下操作:
    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);
}

每个主要的NavigationDrawerFragments都会从内部推送更多的Fragments。因此,每个主要的“屏幕”内部都有几个子屏幕,如下所示。

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

我正在通过上一个FragmentActionBar菜单来推送这些内部Fragments,方法如下:

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都有自己的菜单,有时它们会固定在栏中(例如,如果通过点击NavigationDrawer切换Fragments而不是使用Android返回键返回)
  2. 选择一个NavigationDrawer选项后,应完全弹出StackBack。我怀疑我的ActionBar混乱的项目与此有关,因为一些Fragments仍保留在堆栈中。

因此,请问是否这是一个正确的方法,如何解决StackBackActionBar的问题?

更新:看起来在selectItem方法上清除整个堆栈解决了两个主要问题。虽然我仍然有兴趣听取关于这种方法的意见。

2个回答

0

嗯,我认为最好的方式取决于应用程序需求。考虑两种情况

A- 应用程序需要导航抽屉和具有嵌套/深度导航的多个活动。 那么最好的方法是拥有一个具有FrameLayout和导航抽屉的基本活动。所有活动都从此基本活动扩展/继承。 对于每个活动,将其相应的布局填充并以编程方式添加到baseActivity的FrameLayout容器中。
后退堆栈导航更加容易。

B - 应用程序需要导航抽屉和仅单层导航。 那么可以使用在具有导航抽屉的单个Activity上动态添加和替换片段的概念。


0

这正是我实际遵循的同一教程。虽然它对于他们展示的简单示例运作良好,但我认为它对于更大的项目(即具有1个活动并从那里添加/替换所有片段,并且在每个导航抽屉选项中有多个级别)是非常错误的方法。我再也不会遵循那个例子了,你无法想象我需要做多少问题和hacky解决方法才能使应用程序正常工作 :-( - momo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接