2015-10-25 80 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 –