我正在使用使用片段的“抽屉导航”项目,到目前为止,此方法有效:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Navigation.findNavController(view).navigate(R.id.nav_gallery);
}
});
但是我想在片段类中使用导航方法来调用如下函数:
boolean b;
public void fragmentNavigation() {
if (b) {
Navigation.findNavController(getView()).navigate(R.id.nav_gallery);
}
}
我是使用导航体系结构的新手,我仍然不知道是否需要为该函数声明某种类型的动作侦听器或如何使其工作。
您可以这样做,但请注意以下事项:
- 使用
getView()
是空的 ; 因此,您必须确保您的片段已经创建了视图。
您可以通过两种方法解决此问题
第一:重写具有非null视图参数的onViewCreated()
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
fragmentNavigation(view);
}
boolean b;
public void fragmentNavigation(View view) {
if (b) {
Navigation.findNavController(view).navigate(R.id.nav_gallery);
}
}
第二:在片段类中创建一个View字段,并在其中设置它onCreateView()
View view;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.main_fragment, container, false);
return view;
}
然后始终调用fragmentNavigation(view);
该视图字段。
- 您的片段由
NavHostFragment
“导航图”的托管;这样可以避免潜在的IllegalStateException
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句