如何使用 BottomNavigationView 在两个应用程序屏幕之间切换

How to use BottomNavigationView to switch between two app screens

问题是: 我创建了一个应用程序,其中一个屏幕包含 ViewPager(包含卡片)和 BottomNavigationView。但现在我需要添加功能以切换到 "about" 屏幕。

问题: 如何切换到 "about" 布局和返回最佳方式? "about" 只是简单的布局,只有几个 textView(不需要屏幕之间的数据传输)

我已经尝试重写我的 classes 并创建顶级层次结构 Main class 它将包含另一个 ViewPager,该 ViewPager 将包含片段(带有卡片的 Viewpager 和 "about" 布局) 并在它们之间切换,但目前它并没有真正起作用,也许有一种更简单的方法可以在 "home" 的顶部显示 "about",然后再返回?

我的 NavigationItemSelectedListener 在 MainActivity 中:

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

        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.navigation_home:
                    // change screen
                    return true;
                case R.id.navigation_about:
                    // change screen
                    return true;
            }
            return false;
        }
    };

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

        // other code here ...

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

        ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager);

        // other code here ...

    }

使用 FrameLayout 而不是 ViewPager。然后创建两个片段。一个片段带有 ViewPager,另一个片段用于“关于”视图。在 BottomNavigationView 上单击只需替换合适的片段。

希望对您有所帮助。 :)

找到一种可行的方法:

在 main_layout 我创建了 constraintLayout:

<android.support.constraint.ConstraintLayout
    android:id="@+id/aboutLayer"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:background="@android:color/holo_purple" <--- BACKGROUND NOT TRANSPARENT
    android:visibility="invisible" <--- INVISIBLE
    app:layout_constraintBottom_toTopOf="@+id/navigation"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

</android.support.constraint.ConstraintLayout>

并且在侦听器中只需更改层的可见性

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.navigation_home:
                // hide about
                aboutInfo.setVisibility(View.INVISIBLE);
                return true;
            case R.id.navigation_about:
                // show about
                aboutInfo.setVisibility(View.VISIBLE);
                return true;
        }
        return false;
    }

看起来像: