如何使用导航栏

时间:2015-07-08 11:40:47

标签: android android-fragments navigation-drawer

我使用的是导航抽屉,使用起来很简单。我没有提供完整的代码,但为您提供了易于理解我的问题的详细信息。我正在使用片段,这些片段大约有8个,我用另一个替换它们。但是这里出现了一个问题 我正在导航抽屉的点击事件中替换它们。但有两个主要问题

  1. 更换后,我可以在后台看到上一个片段。替换方法只是调用新的片段吗?如果是,那么我应该怎么做旧片段在我的新片段的背景中不可见。

  2. 当我点击导航抽屉Item时,它会成功加载特定片段。但是当我再次点击该特定项目时,保留在该片段中,它会一次又一次地加载此片段。例如,如果抽屉项目编号3打开片段MyBook,那么通过单击项目num 3 2或多次将打开片段那么多时间。

  3. 所以请有人回答我如何治愈我的应用程序,我已经在上面描述了这种行为。

3 个答案:

答案 0 :(得分:1)

我试过这样的。它的工作正常我

1

答案 1 :(得分:1)

你可以在fragmentstranstion object.like

中使用addtobackstack
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.bodyfragment, new AnotherFragment()); 
transaction.addtoBackStack(null).commit();

答案 2 :(得分:0)

使用替换 - FragmentTransaction的方法而非添加http://developer.android.com/guide/components/fragments.html#Transactions

class MyActivity ... {
  private String currentFragment;

  private void openNewFragment(Fragment fragment) {
      String newFragment = fragment.getClass().getSimpleName();

      if (newFragment.equals(currentFragment)){
          // new fragment already shown
          return;
      }
      // Fragment transaction etc here:
  }
}

为了避免重新实例化片段,跟踪当前打开的片段并仅执行片段事务,如果我们的下一个要打开的片段与当前片段不同。 这可能会像下面这样实现:

{{1}}

请注意,这只会比较基于类名的片段。有时这可能不是唯一的,例如如果有一个DetailFragment类显示有关实体的信息。要显示哪些实体细节可能取决于意图参数。

然而,如果显示Entity = 2的当前详细信息,则上述代码将阻止打开Entity = 1的DetailFragment。对于这些场景,需要扩展有关片段的信息(例如,将参考或WeakReference存储到片段实例本身)。