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

时间:2017-11-11 12:11:09

标签: java android bottomnavigationview

问题是: 我创建了一个带有一个屏幕的应用程序,其中包含ViewPager(保持卡片)和BottomNavigationView。但现在我需要添加功能来切换到“关于”屏幕。

问题: 如何切换到“约”布局并返回最佳方式? “about”只是简单的布局,几乎没有textViews(不需要在屏幕之间传输数据)

我试图重写我的类并创建顶级层次的Main类,它将容纳另一个ViewPager,它将保存Fragments(Viewpager带有卡片和“about”布局)并在它们之间切换,但此刻它没有'真的有用,也许有更简单的方法在“家”的顶部显示“关于”,然后回来?

app look

我的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 ...

    }

2 个答案:

答案 0 :(得分:0)

而不是ViewPager使用FrameLayout。然后创建两个片段。一个片段包含ViewPager,另一个片段用于关于视图。在BottomNavigationView点击后,只需替换合适的片段。

希望它有所帮助。 :)

答案 1 :(得分:0)

找到了一种可能的方法:

在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;
    }

看起来像:

enter image description here