【问题标题】:Start an activity from fragment using bottom navigation bar使用底部导航栏从片段开始活动
【发布时间】:2018-12-16 19:58:15
【问题描述】:

在我的应用中,我有 5 个片段。为了在它们之间切换,我使用底部导航栏。

另外,我需要从我的片段中打开活动,但是当我打开新活动时,它会在每个片段中打开。 (我的意思是在每种情况下都是碎片)

一种情况下如何让activity开启?

我的代码:

 private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
        = new BottomNavigationView.OnNavigationItemSelectedListener() {
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        Fragment fragment = null;
        switch (item.getItemId()) {
            case R.id.nav_home:
                fragmentManager.beginTransaction().hide(active).show(fragment1).commit();
                active = fragment1;
                return true;
            case R.id.nav_bookmark:
                fragmentManager.beginTransaction().hide(active).show(fragment2).commit();
                active = fragment2;
                return true;
            case R.id.nav_blog:
                fragmentManager.beginTransaction().hide(active).show(fragment3).commit();
                active = fragment3;
                return true;
            case R.id.nav_notification:
                fragmentManager.beginTransaction().hide(active).show(fragment4).commit();
                active = fragment4;
                return true;
            case R.id.nav_account:
                fragmentManager.beginTransaction().hide(active).show(fragment5).commit();
                active = fragment5;
                return true;
        }
      return false;
    }
};

谢谢!

【问题讨论】:

  • 能否添加完整代码?

标签: android android-fragments android-activity bottomnavigationview


【解决方案1】:

这显然是 FragmentManager 问题 - 而不是 Activity 问题。
而不是.hide().show() 使用.replace()
如需参考,请参阅documentation

【讨论】:

  • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
  • @JonathanGagne 您是否阅读并理解了正确回答的问题?另一个答案,不回答问题。这个问题很明显,没有什么可说的了。比较提供的两个答案时,这是质量与数量。您如何在没有任何Android 分数的情况下查看Android 问题?只需点击skip
  • 供参考:developer.android.com/reference/androidx/fragment/app/… ...这显然是 FragmentManager 问题 - 而不是 Activity 问题。
【解决方案2】:

根据Android documentation,一个活动总是放在当前活动堆栈的顶部。

因此,如果您拥有带有BottomNavigationViewMainActivity 和片段,则启动一个新的Activity 将打开带有BottomNavigationViewMainActivity 上方的Activity。所以不可能只在BottomNavigationView Fragments 之一中打开Activity。

要实现所需的行为,请考虑改用另一个 Fragment

【讨论】:

  • @MartinZeitler 我认为他在不将替换与 BottomNavigationView 一起使用时是有道理的。据我了解,在 FragmentTransaction 中使用 replace 时,总是会调用新 Fragment 的 onCreateView,这对应用程序性能不太好。使用他使用的代码,可见的 Fragment 不会总是调用 onCreateView。如果我错了,请纠正我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 1970-01-01
  • 2022-08-19
  • 2018-03-07
  • 1970-01-01
相关资源
最近更新 更多