提问人:Vivek M Fauzdar 提问时间:8/12/2022 最后编辑:Vivek M Fauzdar 更新时间:8/12/2022 访问量:547
如何在android中创建时通过底部导航的id访问查找视图
How can i access the find view by id of bottom nav outside on create in android
问:
我正在开发一个应用程序,我在主页上使用底部导航,其中我在第二个片段上有三个片段,称为发布广告我有一个名为输入片段区域的按钮,现在当我进入另一个片段时,我现在进入另一个片段,现在我不想在那里显示底部导航,所以要隐藏它,我正在我的主要活动中使用一个名为“setBottomNavigationVisibility”的方法我正在编写代码来设置底部导航的可见性。 但问题是它在 mainactivty 的方法中抛出空指针异常,说
“void com.google.android.material.bottomnavigation.BottomNavigationView.setVisibility(int)' on a null object reference”在我设置可见性的方法行上
MainActivity 代码
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(visibility)行上设置可见性时;这就是它通过异常的地方
@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);
}
});
不,请指导我如何解决此错误。
答:
0赞
ninhnau19
8/12/2022
#1
在片段中,您想要隐藏底部栏,只需在 onViewCreated 中调用此行即可
getActivity().findViewById(R.id.activity_main_bottom_navigation_view).setVisibility(View.GONE);
当您离开 fragment 时,请在 onDestroy 或 onStop 中调用以下行,以显示另一个 fragment 的底部导航:
getActivity().findViewById(R.id.activity_main_bottom_navigation_view).setVisibility(View.VISIBLE)
评论
0赞
Vivek M Fauzdar
8/12/2022
嘿,谢谢你的回复,它正在工作,但问题是它不适用于每个片段。不知道为什么??
0赞
Vivek M Fauzdar
8/12/2022
如果它不起作用,应用程序崩溃,抛出空指针异常
0赞
ninhnau19
8/12/2022
getActivity().findViewById 适用于 MainActitivity 中的所有片段,如果您导航到某个片段不在 MainActivity 中,则它不起作用
0赞
Vivek M Fauzdar
8/12/2022
不,我只在我的活动 main 中使用它,但是
0赞
Vivek M Fauzdar
8/12/2022
另外,当我返回主页片段时,我希望底部导航应该显示在那里,但它没有??
0赞
Александр Волошиновский
8/12/2022
#2
做这样的事情,定义接口
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();
}
}
评论
0赞
Vivek M Fauzdar
8/12/2022
嘿,谢谢你,它正在工作,但问题是当我返回主主页片段时,它没有显示,而它应该显示在那里
0赞
Александр Волошиновский
8/12/2022
返回后未显示底部导航视图?
0赞
Vivek M Fauzdar
8/12/2022
是的,在后按时,它没有显示在主片段上
0赞
Александр Волошиновский
8/12/2022
在函数showBottomBar的活动中,您添加了用于显示底部导航视图的代码?
0赞
Vivek M Fauzdar
8/12/2022
是的,我添加了代码 public void showBottomBar() { bottomNavigationView.setVisibility(View.VISIBLE);
评论
setBottomNavigationVisibility
bottomNavigationView
setBottomNavigationVisibility
new MainActivity()