android - 这是对 Android Fragments 和 NavigationDrawer 的正确使用吗?

标签 android android-fragments android-actionbar navigation-drawer

虽然我已经使用 Android 多年,但这是我第一次在实际项目中使用 Fragments。所以我有点困惑:-P

此应用有一个包含 4 个主要部分的 NavigationDrawer。我只使用一个主要的 Activity 和一个 Layout,它有一个内容 View,我将其替换为 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);
}

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

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

我正在从以前的 Fragment ActionBar 菜单中推送那些内部 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 选项时,
  3. StackBack 应该完全弹出。我怀疑我的 ActionBar 杂乱项目与此有关,因为 Fragments 以某种方式保存在堆栈中。

那么,任何人都可以请教这是否是一种正确的方法以及如何解决 StackBackActionBar 的问题?

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

最佳答案

嗯,我认为最好的方法取决于应用程序的需要。考虑 2 种情况

A- App 需要 navigationdrawer & multiple activity with nested/deep navigation 。 那么最好的方法是拥有一个具有框架布局和抽屉导航的基本 Activity 。所有 Activity 都从这个基础 Activity 扩展/继承。 并为每个 Activity 膨胀各自的布局并以编程方式添加到 baseActivity 的 framelayout 容器。
返回堆栈导航更容易。

B - 应用需要抽屉导航并且只有单层导航。 然后可以使用在具有抽屉导航的单个 Activity 上动态添加和替换 fragment 的概念。

关于android - 这是对 Android Fragments 和 NavigationDrawer 的正确使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17389153/

相关文章:

android - 如何使用 ListView 使 fragment 可滚动

android - 将 FragmentPagerAdapter 作为 fragment 本身的 ViewPager?

java - 如何从 fragment 更改菜单?

java - 底部导航栏未在 Activity 中显示

android - 如何创建适用于深色和浅色主题的 Android 操作栏?

java - Android 加密 RSA InvalidKeyException

android - 将 Google Analytics 添加到我的应用程序时出现 XML 错误

android - achartengine 演示,没有 R 文件的痕迹

android - "ask, don' t look”如何在Android中应用?

android - 当我返回到“Activity ”时,空间为空(强制使用软键盘)