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 –