使用BottomNavigation切换Fragment

入门级教程,这里要讲的大概是下图的关系,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;
        }
    };

猜你喜欢

转载自blog.csdn.net/LifeZealot/article/details/90690936
今日推荐