如何从另一个片段调用一个片段的方法?
How to call a method of a Fragment from another Fragment?
如何从 DialogFragment 调用片段的方法,知道 TargetFragment 现已弃用?
以前,我可以这样做:
父片段
DialogFragment dialog = new DialogFragment();
dialog.setTargetFragment(this, 0);
dialog.show(this.getSupportFragmentManager(), "tag");
DialogFragment
((ParentFragment) this.getTargetFragment()).myMethod();
这不再可能,因为 TargetFragment 现已弃用。
我读到我可以使用 setFragmentResultListener() 来传递变量,但是我如何从 DialogFragment 中调用 ParentFragment.myMethod() 方法?
这是我找到的解决方案。
父片段
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getParentFragmentManager().setFragmentResultListener("result", this, new FragmentResultListener() {
public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle bundle) {
String action = bundle.getString("action");
if (action != null)
if (action.equals("myMethod"))
ParentFragment.this.myMethod();
}
});
}
DialogFragment
Bundle result = new Bundle();
result.putString("action", "myMethod");
this.getParentFragmentManager().setFragmentResult("result", result);
如何从 DialogFragment 调用片段的方法,知道 TargetFragment 现已弃用?
以前,我可以这样做:
父片段
DialogFragment dialog = new DialogFragment();
dialog.setTargetFragment(this, 0);
dialog.show(this.getSupportFragmentManager(), "tag");
DialogFragment
((ParentFragment) this.getTargetFragment()).myMethod();
这不再可能,因为 TargetFragment 现已弃用。
我读到我可以使用 setFragmentResultListener() 来传递变量,但是我如何从 DialogFragment 中调用 ParentFragment.myMethod() 方法?
这是我找到的解决方案。
父片段
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getParentFragmentManager().setFragmentResultListener("result", this, new FragmentResultListener() {
public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle bundle) {
String action = bundle.getString("action");
if (action != null)
if (action.equals("myMethod"))
ParentFragment.this.myMethod();
}
});
}
DialogFragment
Bundle result = new Bundle();
result.putString("action", "myMethod");
this.getParentFragmentManager().setFragmentResult("result", result);