欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用BottomNavigation切换Fragment

程序员文章站 2022-06-20 18:27:57
...

入门级教程,这里要讲的大概是下图的关系,main_activity.xml里放一个Layout,这里是FrameLayout,然后只要把Fragment的替换这个Layout就行了。

main_activity.xml
FrameLayout
Fragment1
Fragment2
Fragment3

在main_activity.xml文件加多入一个Layout:

<FrameLayout
        android:id="@+id/activity_main_fl_fragment_container"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toTopOf="@+id/constraintLayout"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

MainActivity.java添加部分代码,如下

getSupportFragmentManager().beginTransaction()
                            .replace(R.id.activity_main_fl_fragment_container, Fragment1.newInstance())
                            .commit();

这里R.id.activity_main_fl_fragment_container是要用于被替换的对象,也就是上面FrameLayout的id,Fragment1.newInstance()是调用Fragment的工厂方法,也就是创建Fragment时自动生成的部分代码,这里因为我不用到参数,所以**newInstance()**里面的两个参数删掉就行了,如下:

    public static LocalFragment newInstance() {
        LocalFragment fragment = new LocalFragment();
        Bundle args = new Bundle();
//        args.putString(ARG_PARAM1, param1);
//        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

此时再给MainActivity.java加上必要的接口,不然会出现闪退

implements Fragment1.OnFragmentInteractionListener,Fragment2.OnFragmentInteractionListener,Fragment3.OnFragmentInteractionListener

按上面的方法加多几个Fragment,运行程序,点击导航,就可以运行切换Fragment了。
下面给出MainActvity.java的部分主要代码

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

        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.navigation_local:
                    getSupportFragmentManager().beginTransaction()
                            .replace(R.id.activity_main_fl_fragment_container, Fragment1.newInstance())
                            .commit();
                    return true;
                case R.id.navigation_net:
                    getSupportFragmentManager().beginTransaction()
                            .replace(R.id.activity_main_fl_fragment_container,Fragment2.newInstance())
                            .commit();
                    return true;
                case R.id.navigation_me:
                    getSupportFragmentManager().beginTransaction()
                            .replace(R.id.activity_main_fl_fragment_container, Fragment3.newInstance())
                            .commit();
                    return true;
            }
            return false;
        }
    };