添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
飞翔的投影仪  ·  Collectors.groupingBy ...·  4 月前    · 
知识渊博的饺子  ·  Cause: ...·  1 年前    · 

在片段中的MainActivity之外使用BottomNavigationView

2 人关注

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

在MainActivity中,我将使用这个来设置和恢复一个徽章

// To Add
BadgeDrawable badge = bottomNavigationView.getOrCreateBadge(menuItemId);
badge.setVisible(true);
// To remove
bottomNavigationView.removeBadge(menuItem.getItemId());

然而,如果我尝试同样的方法,它将在一个片段中返回空值

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);
    
java
android
John C
John C
发布于 2021-04-01
2 个回答
ande
ande
发布于 2021-04-02
已采纳
0 人赞同

我不知道你在Java中是否有这个功能(requireActivity),以及你的项目中是否只有一个活动,但这可能是解决方案。

(requireActivity() as MainActivity).findViewById(R.id.bottomNav)

你也可以在你的主活动中添加函数,如addBadge / removeBadge。

但我认为你不能在主活动之外获得bottomNavigationView,因为它是UI mainActivity的一部分,而不是其他片段的一部分。 PS : 你的那句 "MainActivity main = new MainActivity(); "并不好,因为你实例化了一个活动,而没有得到实际的实例,所以bottomNavigationView是空的。可以使用this.getActivity() ( this = fragment instance)

谢谢。我创建了一个名为removeBadges的函数,并通过使用((MainActivity)getActivity()).removeBadges()来调用它。
Pooya Chavoshi
Pooya Chavoshi
发布于 2021-04-02
0 人赞同

如果你想在 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 view:

<?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" />