如何使用底部导航活动更改片段?

新手上路,请多包涵

我使用“底部导航活动”创建了一个新项目:

在此处输入图像描述

这是生成的代码:

 package com.aaron.waller.mrpolitik;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private TextView mTextMessage;

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

        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.navigation_home:
                    mTextMessage.setText(R.string.title_home);
                case R.id.navigation_dashboard:
                    mTextMessage.setText(R.string.title_dashboard);
                case R.id.navigation_notifications:
                    mTextMessage.setText(R.string.title_notifications);
            }
            return true;
        }

    };

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

        mTextMessage = (TextView) findViewById(R.id.message);
        BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
    }

}

如何使用底部栏更改为新片段?例如,我有 3 个片段:片段 1、片段 2 和片段 3 我想使用底部栏中的 3 个按钮更改它们。我还希望我可以通过左右滑动手指来切换片段,我该怎么做?

原文由 HavanaSun 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 335
2 个回答

我的做法是,首先添加三个与此类似的方法(每个方法用于单个片段。将布局名称和片段对象替换为要切换到的相应片段):

 public void switchToFragment1() {
    FragmentManager manager = getSupportFragmentManager();
    manager.beginTransaction().replace(R.id.your_fragment_layout_name, new Fragment1()).commit();
}

所以你的 switch 语句最终看起来像这样:

         switch (item.getItemId()) {
            case R.id.navigation_home:
                mTextMessage.setText(R.string.title_home);
                switchToFragment1();
                break;

            case R.id.navigation_dashboard:
                mTextMessage.setText(R.string.title_dashboard);
                switchToFragment2();
                break;

            case R.id.navigation_notifications:
                mTextMessage.setText(R.string.title_notifications);
                switchToFragment3();
                break;
        }

至于通过向两侧滑动来切换片段,我相信你需要一个 ViewPager

原文由 Abdel Rahman 发布,翻译遵循 CC BY-SA 4.0 许可协议

这很“简单”。

  1. 创建你的片段。假设我们想要 3 个片段; FragmentA , FragmentB and FragmentC with FragmentA being the first Fragment we want on the BottomNavigationView.
  2. 在您的活动中,转到 onNavigationItemSelected 方法并将内容更改为:
     private BottomNavigationView.OnNavigationItemSelectedListener
      mOnNavigationItemSelectedListener
          = new BottomNavigationView.OnNavigationItemSelectedListener(){

      @Override
      public boolean onNavigationItemSelected(@NonNull MenuItem item) {

       switch (item.getItemId()) {
           case R.id.frag_a:
               currentFragment = new FragmentA();
               ft = getSupportFragmentManager().beginTransaction();
               ft.replace(R.id.content, currentFragment);
               ft.commit();
               return true;
           case R.id.frag_b:
               currentFragment = new FragmentB();
               ft = getSupportFragmentManager().beginTransaction();
               ft.replace(R.id.content, currentFragment);
               ft.commit();
               return true;
           case R.id.frag_c:
               currentFragment = new FragmentC();
               ft = getSupportFragmentManager().beginTransaction();
               ft.replace(R.id.content, currentFragment);
               ft.commit();
               return true;
       }

       return false;
    }

   };

  1. 在您的 onCreate() 方法中,执行以下操作:
      @Override
     protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_client_profile);
       ft = getSupportFragmentManager().beginTransaction();
       currentFragment = new FragmentA();
       ft.replace(R.id.content, currentFragment);
       ft.commit();

       BottomNavigationView navigation = (BottomNavigationView)
       findViewById(R.id.navigation); navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
     }

如果您不在 FragmentA onCreate() ,则首次启动时该活动为空白。

如果您想知道 R.id.content 指的是什么,它是活动布局中 Framelayout 的 ID。它最初包含一个 TextView ,删除 TextView 使其看起来像这样:

 <FrameLayout
    android:id="@+id/content"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"/>

最后, ftcurrentFragment 定义如下:

 Fragment currentFragment = null;
FragmentTransaction ft;

不确定优雅,但这有效。

原文由 Ojonugwa Jude Ochalifu 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题