class ChildFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle arguments = getArguments();
if (arguments == null) {
arguments = getParentFragment().getArguments();
}
if (arguments != null) {
if (arguments.containsKey(Constants.EXTRA_FOO)) {
// use it
}
}
}
}
class ParentFragment: Fragment() {
private val viewModel: MyViewModel by viewModels()
}
class ChildFragment: Fragment() {
private val viewModel: MyViewModel by viewModels({requireParentFragment()})
}
另外,如果你想从子节点传递数据到父节点,你可以使用Fragment Result API。请确保在设置结果监听器时使用childFragmentManager。 父片段:
childFragmentManager.setFragmentResultListener("requestKey") { key, bundle ->
val result = bundle.getString("bundleKey")
}
子片段:
setFragmentResult("requestKey", bundleOf("bundleKey" to result))
6条答案
按热度按时间nkoocmlb1#
简单的解决方案是在CreateView上的父片段中获取子片段的引用
ejk8hzay2#
你可以使用interface来实现这一点。在你的父片段中创建interface,并创建它的对象和getter-setter方法。
在子片段中实现它。
然后,在父片段中添加以下代码。
你可以在你的子fragmen中的实现方法中处理这些数据。
qlzsbp2j3#
如果你有一些参数要传递给通过XML定义的片段,我认为更好和简单的选择是动态添加它。在这种情况下,你可以传递两个参数,param1和param2给子片段,如下所示:
newInstance()方法将参数存储在bundle的arguments bundle中。当Android重新创建片段时,它将非常有用。在这种情况下,参数将在
onCreate()
方法中检索。mec1mxoz4#
您可以使用参数将额外的数据传递给片段。此方法通常有效,不仅适用于XML参数。
然后,您可以使用
getArguments
接口获取数据knsnq2tg5#
虽然严格来说它没有回答这个问题,但在某些情况下,当我们实际上想要将相同的参数传递给child-fragment时,它也可以工作:
pkln4tw66#
可以使用具有父片段作用域的视图模型来传递数据:
另外,如果你想从子节点传递数据到父节点,你可以使用Fragment Result API。请确保在设置结果监听器时使用childFragmentManager。
父片段:
子片段: