2015-10-25 47 views
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(); 

} 

回答

0

把你的模型恢复片段的 '的OnCreate' 方法里面的代码。 'OnCreate'在'OnCreateView'之前被调用。有关Android片段生命周期的更多信息,请查看此链接:Android Fragments' lifecycle

+0

没有这个不工作。 OnCreate调用一次。以后只调用OnCreateView –