Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.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 如何使用androidx从另一个片段调用fragment方法_Java_Android_Android Fragments_Android Architecture Navigation - Fatal编程技术网

Java 如何使用androidx从另一个片段调用fragment方法

Java 如何使用androidx从另一个片段调用fragment方法,java,android,android-fragments,android-architecture-navigation,Java,Android,Android Fragments,Android Architecture Navigation,我在应用程序中使用androidx jetpack导航组件,我对如何从当前片段调用前面片段中的方法感到困惑 目前在线上没有关于如何执行此操作的资源 我的实现如下 片段A 这是第一个片段的代码示例 public class FragmentOne extends Fragment{ private String holder; private NavController navController; private Button btn_next; priva

我在应用程序中使用androidx jetpack导航组件,我对如何从当前片段调用前面片段中的方法感到困惑

目前在线上没有关于如何执行此操作的资源

我的实现如下

片段A

这是第一个片段的代码示例

public class FragmentOne extends Fragment{

    private String holder;

    private NavController navController;
    private Button btn_next;

    private void findViews(View view){
        btn_next = view.findViewById(R.id.btn_next);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_one, container, false);

    return view;

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        navController = Navigation.findNavController(view);
        findViews(view);

        holder = "VALUE IN HOLDER VARIABLE";

        btn_next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                navController.navigate(R.id.action_fundone_to_fragmenttwo);
            }
        });


    }

    public void executeInFragmentTwo(){
        System.out.println(holder);
        Toast.makeText(getContext(), holder, Toast.LENGTH_LONG).show();
    }

}
片段二

这是第二个片段的代码示例

public class FragmentTwo extends Fragment{

    private NavController navController;
    private Button btn_exec_fragment_one_method;

    private void findViews(View view){
        btn_exec_fragment_one_method= view.findViewById(R.id.btn_exec_fragment_one_method);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_one, container, false);

    return view;

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        navController = Navigation.findNavController(view);
        findViews(view);

        btn_exec_fragment_one_method.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //HOW DO I CALL FRAGMENT ONE METHOD FROM HERE

                //The method with name "executeInFragmentTwo"

            }
        });
    }

}

请在此方面提供任何帮助,我们将不胜感激。

当用户进入第二个片段时,您的第一个片段将不会处于恢复状态

如果需要从另一个屏幕/片段执行一个函数,则可能需要将该函数移动到与这些屏幕/片段所属的图形生命周期或主机活动生命周期相关的位置,以便在两个屏幕/片段中获得相同的实例

要注入与图形寿命相同的模型,请使用以下语法:

private val model: MyViewModel by navGraphViewModels(R.id.myGraph) { ViewModelFactory() }