简体   繁体   English

我如何使用引用片段和活动的底部导航视图?

[英]How can i use bottom navigation view referring to fragments and activities?

I want to implement logic to my BaseActivity.java where I can switch between activities and fragments.我想为我的 BaseActivity.java 实现逻辑,我可以在其中在活动和片段之间切换。

I came upon only for solutions with only fragments: https://www.truiton.com/2017/01/android-bottom-navigation-bar-example/ or only activities: How can I implement the bottom navigation bar into an app for android?我只遇到了只有片段的解决方案: https://www.truiton.com/2017/01/android-bottom-navigation-bar-example/或只有活动: 如何将底部导航栏实现到应用程序中android? How can I implement the bottom navigation bar into an app for android?如何将底部导航栏实现到 android 的应用程序中?

but I don't know how to combine them但我不知道如何组合它们

<androidx.coordinatorlayout.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.bottomappbar.BottomAppBar
        android:id="@+id/bottom_app_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:fabAlignmentMode="center"
        app:contentInsetRight="0dp"
        app:contentInsetEnd="0dp"
        app:contentInsetStart="0dp"
        app:contentInsetLeft="0dp"
        android:layout_gravity="bottom|center" >

        <com.google.android.material.bottomnavigation.BottomNavigationView
            android:id="@+id/bottomNavigation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:foregroundGravity="bottom"
            app:itemIconTint="@color/primary_icon_color"
            app:itemRippleColor="@color/primary_icon_color_super_light"
            app:itemTextColor="@color/primary_icon_color"
            app:labelVisibilityMode="labeled"
            app:menu="@menu/bottom_nav_menu" />

    </com.google.android.material.bottomappbar.BottomAppBar> 

First of all you need to create a menu folder in res and create a new file named navigation.xml, You can adjust according to your needs.首先需要在res中新建一个menu文件夹,新建一个名为navigation.xml的文件,可以根据自己的需要进行调整。 Below is a sample code in navigation.xml that I use:下面是我使用的 navigation.xml 中的示例代码:

<item
    android:id="@+id/navigation_home"
    android:icon="@drawable/ic_nav_home"
    android:title="Dahboard" />

<item
    android:id="@+id/navigation_category"
    android:icon="@drawable/ic_wallet"
    android:title="E-Wallet" />

<item
    android:id="@+id/navigation_promo"
    android:icon="@drawable/ic_promo"
    android:title="Promo" />

<item
    android:id="@+id/navigation_wishlist"
    android:icon="@drawable/ic_no_favorite"
    android:title="Wishlist" />

because you have called bottom navigation in BaseActivity Layout then you just need to add some code in OnCreate Block code in your BaseActivity.java:因为您在 BaseActivity 布局中调用了底部导航,所以您只需在 BaseActivity.java 的 OnCreate Block 代码中添加一些代码:

viewPager = findViewById(R.id.viewpager);
    viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));
    viewPager.setOffscreenPageLimit(pager_number);
    createNotificationChannel();
    getToken();
    navigation = findViewById(R.id.navigation);
    navigation.setOnNavigationItemSelectedListener(item -> {
        switch (item.getItemId()) {
            case R.id.navigation_home:
                viewPager.setCurrentItem(0);
                return true;
            case R.id.navigation_category:
                viewPager.setCurrentItem(1);
                return true;
            case R.id.navigation_promo:
                viewPager.setCurrentItem(2);
                return true;
            case R.id.navigation_wishlist:
                viewPager.setCurrentItem(3);
                return true;
        }
        return false;
    });

    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        }
        @Override
        public void onPageSelected(int position) {
            if (prevMenuItem != null) {
                prevMenuItem.setChecked(false);
            } else {
                navigation.getMenu().getItem(0).setChecked(false);
            }
            navigation.getMenu().getItem(position).setChecked(true);
            prevMenuItem = navigation.getMenu().getItem(position);
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

and then you can add this code bellow your onCreate Block code:然后你可以在你的 onCreate Block 代码下面添加这个代码:

    public class MyAdapter extends FragmentPagerAdapter {

    MyAdapter(FragmentManager fm) {
        super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                return new HomeFragment();
            case 1:
                return new EwalletFragment();
            case 2:
                return new PromoFragment();
            case 3:
                return new WishlistFragment();
        }
        return null;
    }

    @Override
    public int getCount() {
        return pager_number;
    }

}

Don't forget to initialize variable abovr onCreate Block code:不要忘记初始化变量 abovr onCreate Block 代码:

public BottomNavigationView navigation;
public ViewPager viewPager;
MenuItem prevMenuItem;
int pager_number = 4;

I hope the above solution can solve your problem.我希望上述解决方案可以解决您的问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 底部导航栏应使用多少个活动? - How many activities should I use with a bottom navigation bar? 删除带有片段的底部导航视图 - Remove Bottom Navigation view with fragments Android:如何将活动转换为片段以正确使用导航抽屉? - Android: how to convert activities to fragments in order to use the navigation drawer correctly? “默认”底部导航视图如何更改片段? - How does 'default' bottom navigation view changes fragments? 如何将我现有的 Android Studio 的两个活动转换为两个片段,以便我可以制作导航栏? - How do I convert my existing two Activities of Android Studio into two fragments so that I can make the Navigation Bar? 如何使用导航抽屉嵌套碎片? - How can I nest fragments with a navigation drawer? 如何为具有多个活动的应用程序实施适当的祖先导航,其中一项活动可以交换内容片段? - How to implement proper ancestral navigation for application with several activities one of which can swap content fragments? 如何在多屏幕工作流程中使用活动或片段? - How to use activities or fragments in a multi screen workflow? 如何在列表视图中创建活动 - How can I create an activities in a list view 如何在底部导航视图中的每个项目名称下方添加行(视图)? - How Can I add line(view) below each of the item name in bottom navigation view?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM