【问题标题】:Is this a correct use of Android Fragments and NavigationDrawer?这是对 Android Fragments 和 NavigationDrawer 的正确使用吗?
【发布时间】:2013-06-30 09:55:32
【问题描述】:

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

这个应用程序有一个NavigationDrawer,有 4 个主要部分。我只使用了一个主要的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 而不是使用Android 后退键返回来切换Fragments
  2. 选择NavigationDrawer 选项之一时,应完全弹出StackBack。我怀疑我的 ActionBar 乱七八糟的项目与此有关,因为 Fragments 以某种方式保存在堆栈中。

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

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

【问题讨论】:

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


    【解决方案1】:

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

    A- 应用程序需要具有嵌套/深度导航的导航抽屉和多个活动。 那么最好的方法是拥有一个具有框架布局和导航抽屉的基本活动。所有活动都从这个基础活动扩展/继承。 并为每个活动膨胀相应的布局并以编程方式添加到 baseActivity 的框架布局容器中。
    返回栈导航更容易。

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

    【讨论】:

      【解决方案2】:

      http://developer.android.com/training/implementing-navigation/nav-drawer.html

      这是我用来学习导航抽屉的教程。发现它非常有用。它介绍了设置抽屉、将其链接到图标以及将片段上传到页面的过程。

      【讨论】:

      • 这与我实际遵循的教程相同。虽然它适用于他们展示的简单示例,但我认为对于较大的项目来说这是一种非常错误的方法(即有 1 个活动和从那里添加/替换的所有片段,并且在每个导航抽屉选项中都有多个级别) .我再也不会遵循那个例子了,你无法想象我需要做多少问题和解决方法才能使应用程序正常工作:-(
      猜你喜欢
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      相关资源
      最近更新 更多