我有特定的片段,它们将在后台线程中执行操作(或者将启动结果的活动),我想设置一个回调(来自托管活动),以便在这些操作之后从片段中获取一些数据,实例:
FragmentManager fm = getFragmentManager();
TakePhotoFragment takePhotoFragment = (TakePhotoFragment) fm.findFragmentById(R.id.frTakePhoto);
takePhotoFragment.setListener(new TakePhotoFragment.OnNewBitmapListener() {
@Override
public void onNewBitmap(Bitmap bitmap) {
// do things in the activity
}
});
我已经读过使用Bundle
s将参数提供给片段更安全,但有几种情况我希望使用Bundles传递对象引用而不是简单的String
数据。使用FragmentManager
获取引用并在其上调用方法是否有任何问题?如果是,哪些是解决方法?
答案 0 :(得分:2)
如果尚未创建片段,请使用bundle,否则使用实例。
当android重新创建你的片段时,传递bundle becoz会更安全,你的传递数据不会丢失。
如果您使用实例1传递数据,则必须自己保存并恢复该数据
注意:您可以通过使复杂对象成为可分区或可序列化来传递复杂对象。 也不推荐在bundle中传递大数据
如果你的片段是用xml定义的,你可以通过findFragmentById()
类的fragmentManager
来获取实例