有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我想为我的BaseActivity实现逻辑。java,我可以在活动和片段之间切换

我只想到只有片段的解决方案:https://www.truiton.com/2017/01/安卓-bottom-navigation-bar-example/或只有活动: How can I implement the bottom navigation bar into an app for 安卓? 如何在安卓应用程序中实现底部导航栏

但我不知道如何把它们结合起来

<安卓x.coordinatorlayout.widget.CoordinatorLayout
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent">

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

        <com.google.安卓.material.bottomnavigation.BottomNavigationView
            安卓:id="@+id/bottomNavigation"
            安卓:layout_width="match_parent"
            安卓:layout_height="wrap_content"
            安卓:layout_alignParentBottom="true"
            安卓: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.安卓.material.bottomappbar.BottomAppBar> 

共 (1) 个答案

  1. # 1 楼答案

    首先,您需要在res中创建一个菜单文件夹,并创建一个名为navigation的新文件。xml,您可以根据需要进行调整。下面是导航中的示例代码。我使用的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" />
    

    因为您已经在BaseActivity布局中调用了底部导航,所以您只需要在BaseActivity的OnCreate块代码中添加一些代码。爪哇:

    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) {
    
            }
        });
    

    然后您可以在onCreate块代码下面添加此代码:

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

    不要忘记在创建块代码时初始化变量abovr:

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

    **编辑:**

    如果您想转到另一个活动,只需在其中一个案例中添加一个意图

    例如,我希望id为navigation_wishlist的底部导航在单击时移动到设置活动

                    case R.id.navigation_wishlist:
                            Intent i = new Intent(this, SettingActivity.class);
                            startActivity(i);
                    return true;
    

    我希望上述解决方案能解决你的问题