如何禁用某些片段的底部导航

时间:2021-07-17 06:06:44

标签: android android-fragments bottomnavigationview

您好,我在主要活动中添加了底部导航,其余所有布局都是片段,现在我有一个登录片段,我不想显示底部导航,我什至不想单独将底部导航包含到每个片段中,有什么方法可以禁用某些片段中的底部导航,例如登录片段

<块引用>

如果您需要更多参考,请告诉我我会更新问题

Main_Activity.java

public class MainActivity extends AppCompatActivity {

    BottomNavigationView bottomNavigationView;
    Deque<Integer> integerDeque = new ArrayDeque<>(4);
    boolean flag = true;

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
        setContentView(R.layout.activity_main);
        Window window = this.getWindow();
        window.setStatusBarColor(this.getResources().getColor(R.color.black));
        bottomNavigationView = findViewById(R.id.bottom_navigation_view);
        integerDeque.push(R.id.nav_home);
        loadFragments(new Home_Fragment());
        bottomNavigationView.setSelectedItemId(R.id.nav_home);

        bottomNavigationView.setOnNavigationItemSelectedListener(
                item -> {
                    int id = item.getItemId();
                    if (integerDeque.contains(id)) {
                        if (id == R.id.nav_home) {
                            integerDeque.size();
                            if (flag) {
                                integerDeque.addFirst(R.id.nav_home);
                                flag = false;
                            }
                        }
                        integerDeque.remove(id);
                    }
                    integerDeque.push(id);
                    loadFragments(getFragment(item.getItemId()));
                    return false;
                }
        );

    }

    @SuppressLint("NonConstantResourceId")
    private Fragment getFragment(int itemId) {
        switch (itemId) {
            case R.id.nav_home:
                bottomNavigationView.getMenu().getItem(0).setChecked(true);
                return new Home_Fragment();
            case R.id.nav_following:
                bottomNavigationView.getMenu().getItem(1).setChecked(true);
                return new Following_Fragment();
            case R.id.nav_upload:
                bottomNavigationView.getMenu().getItem(2).setChecked(true);
                return new Upload_Fragment();
            case R.id.nav_notification:
                bottomNavigationView.getMenu().getItem(3).setChecked(true);
                return new Notification_Fragment();
            case R.id.nav_profile:
                bottomNavigationView.getMenu().getItem(4).setChecked(true);
                return new Profile_Fragment();
        }
        bottomNavigationView.getMenu().getItem(0).setChecked(true);
        return new Home_Fragment();
    }

    public void loadFragments(Fragment fragment) {
        if (fragment != null) {
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.fragment_container, fragment, fragment.getClass().getSimpleName())
                    .commit();
        }
    }

    @Override
    public void onBackPressed() {
        integerDeque.pop();
        if (!integerDeque.isEmpty()) {
            loadFragments(getFragment(integerDeque.peek()));
        } else {
            finish();
        }
    }
}

Update 1 // 根据答案添加 login_fragment 但它不起作用

Login_Fragment.java

  public class Login_Fragment extends Fragment {
    @Nullable
    @org.jetbrains.annotations.Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.login_fragment, container, false);
        if (getActivity() != null && getActivity() instanceof MainActivity)
        ((MainActivity) getActivity()).bottomNavigationView.setVisibility(View.GONE);
    }
}

更新一、二方法错误

error: unreachable statement
        if (getActivity() != null && getActivity() instanceof MainActivity)
        ^

1 个答案:

答案 0 :(得分:2)

您可以在片段中执行以下操作:

BottomNavigationView navBar = getActivity().findViewById(R.id.bottomBar);
navBar.setVisiblity(View.GONE);

 public class Login_Fragment extends Fragment {
    @Nullable
    @org.jetbrains.annotations.Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
    if (getActivity() != null && getActivity() instanceof MainActivity)
            ((MainActivity) getActivity()).bottomNavigationView.setVisibility(View.GONE);
   return inflater.inflate(R.layout.login_fragment, container, false);
       
    }
}