Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无需点击按钮的Android片段导航_Java_Android_Fragment_Android Architecture Navigation_Android Navigation - Fatal编程技术网

Java 无需点击按钮的Android片段导航

Java 无需点击按钮的Android片段导航,java,android,fragment,android-architecture-navigation,android-navigation,Java,Android,Fragment,Android Architecture Navigation,Android Navigation,我正在使用一个使用片段的“抽屉导航”项目,到目前为止,该方法有效: button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Navigation.findNavController(view).navigate(R.id.nav_gallery); } }); 但我想在一个片段

我正在使用一个使用片段的“抽屉导航”项目,到目前为止,该方法有效:

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();因此,您必须确保您的片段已经创建了视图
  • 你可以通过几种方法来解决这个问题

    首先:重写具有非空视图参数的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);
        } 
    }
    
    Second:在fragment类中创建一个视图字段,并将其设置在
    onCreateView()中。

    然后总是调用
    fragmentNavigation(视图)在该视图字段上

  • 您的片段由导航图的
    NavHostFragment
    托管;这样您就可以避免潜在的非法状态异常
  • 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;
    }