【问题标题】:Switch activity/fragment with bottom navigation使用底部导航切换活动/片段
【发布时间】:2018-10-09 14:05:06
【问题描述】:

我创建了一个带有底部导航栏的活动。 我用谷歌搜索了很多关于它的东西,但现在我不知道如何准确地处理这个问题。 之前,我只是在用户单击底部导航时启动了另一个活动,但我认为这并不好。

如何在标签之间切换? 我必须使用片段吗?那么'setContentView(int layoutResID)'呢?我怎样才能做到这一点?我很困惑……

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() {

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.navigation_home:
                return true;
            case R.id.navigation_dashboard:
                startActivity(dashboardActivity);
                return true;
            case R.id.navigation_notifications:
                startActivity(dashboardActivity);
                return true;
        }
        return false;
    }

};

非常感谢您的帮助 - 我希望您明白我的意思。

【问题讨论】:

    标签: android android-fragments android-activity


    【解决方案1】:

    活动转换总是很昂贵,只有在切换上下文时我们才应该从一个活动切换到另一个活动。 fragment 是活动中 UI 的一部分。同一个片段可以用于多个活动。就像活动一样,片段有自己的生命周期,setContentView(int layoutResID) 可以在片段的OnCreate 中设置为不同的布局。

    link 详细解释了何时使用活动或片段。

    Android developer guide on Fragments

    Code path tutorial 在底部导航视图上。

    【讨论】:

      【解决方案2】:

      请参考:-

      https://github.com/waleedsarwar86/BottomNavigationDemo

      和完整的解释

      http://waleedsarwar.com/posts/2016-05-21-three-tabs-bottom-navigation/

      你会得到一个运行代码,这里有解释。

      【讨论】:

        【解决方案3】:

        底部导航视图是android库中引入的导航栏,可以轻松地在视图之间通过单击切换。虽然它几乎可以用于任何目的,但最常用于通过单击在片段之间切换。将其用于打开活动有点荒谬,因为它忽略了单击即可切换视图这一最重要的功能。在这方面有很多很好的文章和博客,其中之一是: https://medium.com/@hitherejoe/exploring-the-android-design-support-library-bottom-navigation-drawer-548de699e8e0 希望这能解决你的疑问..

        【讨论】:

          【解决方案4】:
          bottomNavigationView.setOnNavigationItemSelectedListener
                          (new BottomNavigationView.OnNavigationItemSelectedListener() {
                              @Override
                              public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                                  Fragment selectedFragment = null;
                                  switch (item.getItemId()) {
                                      case R.id.action_item1:
                                          selectedFragment = ItemOneFragment.newInstance();
                                          FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                                          transaction.replace(R.id.frame_layout, selectedFragment);
                                          transaction.commit();
                                          // selectedFragment.getChildFragmentManager().beginTransaction();
                                          break;
          
                                      case R.id.action_item2:
                                          selectedFragment = ItemTwoFragment.newInstance();
                                          FragmentTransaction transactiona = getSupportFragmentManager().beginTransaction();
                                          transactiona.replace(R.id.frame_layout, selectedFragment);
                                          transactiona.commit();
                                        //  selectedFragment = ItemThreeFragment.newInstance();
                                          break;
          
                                      case R.id.action_item3:
                                      //  selectedFragment = ItemOneFragment.newInstance();
                                          Intent intent=new Intent(MainView.this, YoutActivityLive.class);
                                          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                          startActivity(intent);
                                         // selectedFragment = ItemTwoFragment.newInstance();
                                          break;
          
          
                                      case R.id.action_item5:
                                          selectedFragment = ItemOneFragment.newInstance();
                                          FragmentTransaction transactionb = getSupportFragmentManager().beginTransaction();
                                          transactionb.replace(R.id.frame_layout, selectedFragment);
                                          transactionb.commit();
                                         // selectedFragment = ItemFiveFragment.newInstance();
                                          break;
                                  }
          
                                  return true;
                              }
                          });
          

          【讨论】:

          • 点评来源: 欢迎来到 Stack Overflow!请不要只用源代码回答。尝试对您的解决方案如何工作提供一个很好的描述。请参阅:How do I write a good answer?。谢谢
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多