android-fragments 我怎样才能在android中创建时通过底部导航栏的id访问查找视图

0yycz8jy  于 2022-11-14  发布在  Android
关注(0)|答案(2)|浏览(133)

我正在开发一个应用程序,其中我在Home上使用底部导航,在第二个片段上有三个片段,称为Post Ad我有一个按钮,称为enter fragment zone,通过该按钮,我现在进入另一个片段。现在,当我进入另一个片段时,我不希望在那里显示底部导航,因此为了隐藏它,我在我的主Activity中使用了一个方法,称为**”setBottomNavigationVisibility”**我在这里编写代码来设置底部导航的可见性。但问题是,它在mainactivty的方法中抛出了空指针异常,表示

**“void com.google.android.material.bottomnavigation.BottomNavigationView.setVisibility(int)'在空对象引用上”**在我设置可见性的方法行上
主要活动代码

public class MainActivity extends AppCompatActivity {

NavController navController;
BottomNavigationView bottomNavigationView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    navController = Navigation.findNavController(this, R.id.fragmentContainerView);
    bottomNavigationView = findViewById(R.id.activity_main_bottom_navigation_view);
    NavigationUI.setupWithNavController(bottomNavigationView, navController);

}

public void setBottomNavigationVisibility(int visibility) {

    bottomNavigationView.setVisibility(visibility);

}}

在上面的方法中,当我试图设置行**bottomNavigationView.setVisibility(可见性)上的可见性时;**这就是抛出异常的地方

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    binding = FragmentSecondBinding.inflate(inflater, container, false);

    // Inflate the layout for this fragment
    View view =  binding.getRoot();

    viewModel = new ViewModelProvider(requireActivity()).get(PageViewModel.class);

    ((MainActivity) requireActivity()).setBottomNavigationVisibility(View.GONE);

    binding.toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           Navigation.findNavController(view).navigate(R.id.action_secondFragment2_to_postad);
        }
    });

否请指导我如何解决此错误。

irtuqstp

irtuqstp1#

这样做,定义接口

interface DashboardActivityDelegate {
    void hideBottomBar();
    void showBottomBar();
}

您活动必须实现此接口,
并在您想要隐藏底部导航视图片段中执行以下操作:声明全局变量

private DashboardActivityDelegate dashboardActivityDelegate;

@Override
public void onAttach(Context context) {
      super.onAttach(context);
      if (context instanceof DashboardActivityDelegate) {
         dashboardActivityDelegate = (DashboardActivityDelegate)context;
      }

   }

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      if (dashboardActivityDelegate != null) {
         dashboardActivityDelegate.hideBottomBar();
      }
   }

@Override
public void onDestroy() {
      super.onDestroy();
      if (dashboardActivityDelegate != null) {
         dashboardActivityDelegate.showBottomBar();
      }

   }
ikfrs5lh

ikfrs5lh2#

在要隐藏底部栏片段中,只需在 onViewCreated 中调用此行

getActivity().findViewById(R.id.activity_main_bottom_navigation_view).setVisibility(View.GONE);

且当您离开片段时,在 onDestroyonStop 中调用此行以查看另一个片段底部导航:

getActivity().findViewById(R.id.activity_main_bottom_navigation_view).setVisibility(View.VISIBLE)

相关问题