在 Fragment 之间传递数据 | Android 开发者 | Android Developers (google.cn)
简单的说,在要接受数据的Fragment设置监听器,然后在发送数据的Fragment发送数据,接收端即使处于Pause状态也可以收到数据更新。发送和接收的数据都是一个Bundle。
接收端监听器代码:
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getParentFragmentManager().setFragmentResultListener("key", this, new FragmentResultListener() {
@Override
public void onFragmentResult(@NonNull String key, @NonNull Bundle bundle) {
String result = bundle.getString("bundleKey");
// 这里写对result的操作
}
});
}
代码解释:重写onCreate方法,在fragment处于create时注册FragmentResultListener,其中的key为发送端内对应的key,一个key对应一个数据,可以注册多个FragmentResultListener,监听多个不同key的数据。使用此方法传递的数据为一个bundle,这个bundle没有特殊性,可以放int,string,Serializable等类型的数据。
获取数据的流程为:①通过key获取bundle ②通过bundlekey获取bundle内的数据。
发送端代码:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle result = new Bundle();
result.putString("bundleKey", "result");
getParentFragmentManager().setFragmentResult("key", result);
}
});
代码解释:这段代码为设置按钮点击时发送数据。其中key与上文接收端内的key为同一个。
发送数据的流程为:①创建一个bundle,键值对为bundleKey和字符串”result”。②发送这个bundle,设置FragmentResult的键为key。
本文演示的Fragment具有同等地位,如果要在父级 Fragment 和子级 Fragment 之间传递结果,请参考文章开头的Google官方文章。
感谢分享,赞一个