首页 > 解决方案 > 在 Fragment 的 MainActivity 之外使用 BottomNavigationView

问题描述

如何在 MainActivity 之外使用 bottomNavigationView 变量?

在 MainActivity 中,我将使用它来设置和重新设置徽章

// To Add
BadgeDrawable badge = bottomNavigationView.getOrCreateBadge(menuItemId);
badge.setVisible(true);

// To remove
bottomNavigationView.removeBadge(menuItem.getItemId());

但是,如果我尝试相同的方法,它将在片段中返回 null

public BottomNavigationView bottomNavigationView;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        MainActivity main = new MainActivity();
        main.bottomNavigationView.removeBadge(2131231026);

我也在片段中尝试过这个,但没有任何反应

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        final View v =  inflater.inflate(R.layout.fragment_chat, container, false);
        final View nav =  inflater.inflate(R.layout.activity_main, container, false);
        bottomNavigationView = nav.findViewById(R.id.bottomNav);
        BadgeDrawable badge = bottomNavigationView.getOrCreateBadge(2131231026);
        badge.setVisible(false);

标签: javaandroid

解决方案


如果你想在MainActivity第一个之外使用 BottmNavigationView,你应该创建一个单独的活动MenuActivity,假设你想在 BottmNavigationView 中使用 5 个项目,所以:

public class MenuActivity extends AppCompatActivity {
BottomNavigationView bottomNavigationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_menu);

    final Fragment fragment1 = new DiscoverFragment();
    final Fragment fragment2 = new CreateFragment();
    final Fragment fragment3 = new AnalyticsFragment();
    final Fragment fragment4 = new MoreFragment();
    final FragmentManager fm = getSupportFragmentManager();
    final Fragment[] active = {fragment1};

    fm.beginTransaction().add(R.id.main_container, fragment4, "4").hide(fragment4).commit();
    fm.beginTransaction().add(R.id.main_container, fragment3, "3").hide(fragment3).commit();
    fm.beginTransaction().add(R.id.main_container, fragment2, "2").hide(fragment2).commit();
    fm.beginTransaction().add(R.id.main_container,fragment1, "1").commit();


    bottomNavigationView=findViewById(R.id.bottom_navigation);
    bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {


        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.search:
                    fm.beginTransaction().hide(active[0]).show(fragment1).commit();
                    active[0] = fragment1;
                    return true;
                case R.id.add:
                    fm.beginTransaction().hide(active[0]).show(fragment2).commit();
                    active[0] = fragment2;
                    return true;
                case R.id.chart:
                    fm.beginTransaction().hide(active[0]).show(fragment3).commit();
                    active[0] = fragment3;
                    return true;

                case R.id.more:
                    fm.beginTransaction().hide(active[0]).show(fragment4).commit();
                    active[0] = fragment4;
                    break;
            }
            return true;
        }
    });
  }
}

XML 视图:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">



<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="MainActivity"
    tools:showIn="@layout/activity_main"
    android:padding="1dp"
    android:id="@+id/main_container"/>

<com.google.android.material.bottomnavigation.BottomNavigationView
    app:itemIconSize="26dp"
    app:itemTextAppearanceActive="@style/BottomNavigationView.Active"
    app:itemTextAppearanceInactive="@style/BottomNavigationView"
    app:itemIconTint="@drawable/navigation_view_colored"
    app:itemTextColor="@drawable/navigation_view_colored"
    app:labelVisibilityMode="labeled"
    android:layout_gravity="bottom"
    android:background="@android:color/white"
    android:id="@+id/bottom_navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:menu="@menu/bottom_navigation_menu" />

   </androidx.coordinatorlayout.widget.CoordinatorLayout>

确保您创建了 5 个片段,例如DiscoverFragmentCreateFragment等等……以及它们的 XML 视图。


推荐阅读