当前位置: 首页 > 知识库问答 >
问题:

Android导航抽屉项目链接到片段

景国兴
2023-03-14

在我的应用程序中,我创建了一个导航抽屉,其中有5个项目,一旦在导航抽屉中单击一个项目,我就可以正确地检查该项目,并使用片段管理器显示新片段。但目前我有三个问题:

>

  • 我在某种程度上解决了这个问题,但使用了一个方法,在MainActivity中执行片段事务,同时检查新项。因此,每当一个片段想要调用另一个片段时,它都会使用这个函数传递nav\u drawer\u item\u id作为参数。我认为这个解决方案很糟糕,所以如果你有更好的想法,那真的很受欢迎

我最大的问题是,当用户按下Android Back Button时,片段会弹回到前一个片段(或者有时我以编程方式调用popback(),因为我已经完成了该特定片段)

  • 我真的不知道如何解决这个问题,因为我无法检查导航抽屉中的正确项目,一旦一个片段弹出,我需要知道它是哪个片段
  • 我也解决了这个问题,在抽屉菜单onNavigationItemSelectedListener中设置了一个nextFrament,并在抽屉中显示了新的片段onDrawerCloked。这是唯一的解决方案吗?

我没有发布任何代码,因为它真的不值得被看到,所以这里有一些额外的信息:

  • 我有一个活动,其中包含导航抽屉,当前处理片段事务
  • 我有6个片段,5个从导航抽屉调用,1个仅从其他UI组件调用,但这一个当然不需要在抽屉上检查。
    • 我考虑了一个解决方案,就像“从显示的片段中设置选中的项”,但我没有找到任何方法从片段中获取导航抽屉,以便设置正确的选中项

共有1个答案

齐昆
2023-03-14

在您的活动中实现FragmentManager. OnBackStackChangedListener,以便在从后堆栈弹出某些内容时收到通知,并从回调中同步抽屉菜单。这应该可以消除按下后退按钮时引起的问题。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    .....

    getSupportFragmentManager().addOnBackStackChangedListener(this);
}

@Override
public void onBackStackChanged() {

    // Get the currently active fragment
    Fragment fragment = 
        getSupportFragmentManager().findFragmentById(R.id.fragments_frame);

    // Check which fragment is active, check the
    // correct selection and set the title accordingly
    if (fragment instanceof FragmentAtPosition0) {
        setCheckedAndTitle(0);
    } else if (fragment instanceof FragmentAtPosition1) {
        setCheckedAndTitle(1);
    }
}

private void setCheckedAndTitle(int position) {
    MenuItem item = navView.getMenu().getItem(position);
    item.setChecked(true);
    setTitle(item.getTitle());
}

至于你提到的另外两个案例,我认为你提到的解决方案是首选方法。

 类似资料:
  • 抽屉打开正常并正确显示,但当我单击列表中的项目时什么都没有发生。这是我从谷歌教程(UDACITY)中获取的代码。 我希望它能帮助你。 我做的一切都和教程视频完全一样。

  • 我目前正在为我的Android应用程序使用导航抽屉。在我的第一个片段中,有一个片段使用Facebook的Graph API加载数据。因此,当我的应用程序第一次加载时,它首先进入第一个片段。 然后,我使用导航抽屉单击另一个片段并查看它。 最后,我重用导航抽屉返回第一个片段并查看它。 我面临的问题是,我如何继续利用已经创建过一次的片段,而不是在选择导航抽屉项时重新创建它。我的片段切换代码如下所示。 我

  • 有人能告诉我如何创建活动到这个主要活动,导航抽屉将看到在所有他们?我需要使用这个特定的MainActivity代码。我不需要使用碎片,只要3个简单的活动将添加到这个抽屉。 NavDrawer布局:

  • 在阅读了关于片段和活动的文档和讨论后,我想我已经把情况弄清楚了。 活动应该为用户提供一个屏幕,用户可以在其中工作。导航到其他屏幕通常会破坏活动。 片段应该提供很少或单个功能组件,可以在活动中再次使用。片段的内容应该相互独立地工作,因此可以在多个活动中重用。 虽然这一切似乎都有道理,但有一件事我无法理解: 如果您创建一个新的Android应用程序,并选择创建Android导航抽屉应用程序的选项,为什

  • 我已经在我的项目中添加了一个导航抽屉活动,并尝试将项目作为片段添加。这就是我在主要活动中所做的。 默认片段是Home,它工作正常,正如预期的那样,但其他片段与Home片段重叠。(HomeFragment是唯一工作正常的)。我在每个片段类中都做过这样的事情: 我看不出错误在哪里。一切看起来都很好,但所有其他片段都显示在HomeFragment上。

  • 我有一个主活动启动导航抽屉。 也有一些片段。 我需要从片段内部更改导航抽屉列表的标题。 我尝试了这个内部片段: 但是到目前为止还没有运气。这是我的主要活动: 在主活动类中使用相同的方法有效,但在片段中无效。我不知道如何更新字符串并通知抽屉此更改!