(Android)导航抽屉项目仅在一个活动中起作用

时间:2016-02-11 15:50:11

标签: android navigation-drawer

我的应用中有7个活动。每项活动都扩展了“基础活动”。这个“Base”有一个从我的数据库生成导航项的方法。

例如:

public class ActivityA extends ActivityBase{}

public class ActivityB extends ActivityBase{}

这是ActivityBase:

public class ActivityBase extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{}

在这个ActivityBase中,我有:

  1. 从数据库中获取项目

    generateDrawerItems(){}
    
  2. 每个项目操作

    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
       int id = item.getItemId();
       if (id == 1) {
          Intent intent = new Intent(this, ActivityA.class);
          startActivity(intent);
       }
       if (id == 2) {
          Intent intent = new Intent(this, ActivityB.class);
          startActivity(intent);
       }
      ...
    }
    
  3. 一切都在我的MainActivity上完美运行,但在任何其他活动中,尽管所有项都是从“generateDrawerItems”方法正确生成的,但是不会调用“onNavigationItemSelected”方法。换句话说,每个活动都有navigationDrawer,但只有在MainActivity上才有“触摸动作”。

    我该怎么办?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,当你从drawerlayaout开始另一个Activity时,你会失去布局与MainActivity的既定链接。

启动后,是否为每个活动创建了DrawerLayout?

此外,我认为为我们的drawerlayoutout的每个项目开始活动将很难适应大屏幕设备。您应该查看Fragments与drawerlayout的交互,这将解决您的问题,并让您的应用程序更好地支持大屏幕。

修改

为此,您需要MainActivity定义DrawerLayout并包含Fragment(它将是您在活动启动时的第一个视图)。并且DrawerLayout上的每个项目都有一个片段。

更改内容:

@Override
public boolean onNavigationItemSelected(MenuItem item) {
   FragmentManager fragmentManager = getFragmentManager();
   FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

   if (id == R.id.nav_item1) {
      FragOne fragment = new FragOne();
      fragmentTransaction.replace(R.id.main_container, fragment)
                    .addToBackStack(null)
                    .commit();
    } else if (id == R.id.nav_item2) {
      FragTwo fragment = new FragTwo();
      fragmentTransaction.replace(R.id.main_container, fragment)
                    .addToBackStack(null)
                    .commit();
 }
  ...
}

抽屉将留在每个碎片上。您可以在Android studio模板中找到XML逻辑的示例。

答案 1 :(得分:0)

我发现了发生了什么事。西蒙所说的完美无缺,但如果你遇到同样的问题,也许这适合你。

问题在于抽屉触摸操作仅适用于一项活动。我停下来试图找出与其他产品有什么不同。我发现元素“android.support.design.widget.NavigationView”应该是“android.support.v4.widget.DrawerLayout”中的最后一个元素, 我只是改变它现在它的工作原理。我不知道为什么会这样,如果有人知道请告诉我们。