0
我需要恢复对象(视图模型)并在旋转显示后绑定到布局。 我将对象保存到onSaveInstanceState中的Byte []。 我的问题:onCreateView之前发射onActivityCreated和此代码binding.setViewModel(templateViewModel)绑定空。如何获得保存的templateViewModel?在片段中旋转显示后恢复对象
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
TemplateFragmentRecyclerViewBinding binding = TemplateFragmentRecyclerViewBinding.inflate(inflater, container, false);
binding.setViewModel(templateViewModel);
binding.executePendingBindings();
return binding.getRoot();
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
byte[] data =savedInstanceState.getByteArray(getString(R.string.templateViewModelData));
//Serialize
templateViewModel = (TemplateViewModel) Parcel.convertFromBytes(data);
@Override
public void onSaveInstanceState(Bundle state) {
super.onSaveInstanceState(state);
byte[] data = Parcel.convertToBytes(templateViewModel);
state.putByteArray(getString(R.string.templateViewModelData), data);
}
utils的功能:
public static byte[] convertToBytes(Object object) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = new ObjectOutputStream(bos);
out.writeObject(object);
return bos.toByteArray();
}
public static Object convertFromBytes(byte[] bytes) throws IOException, ClassNotFoundException {
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInput in = new ObjectInputStream(bis);
return in.readObject();
}
没有这个不工作。 OnCreate调用一次。以后只调用OnCreateView –