2014-09-23 48 views
2

我已創建自定義視圖ComplexViewEditText內。在他的佈局中,我有片段DetailsFragment和3 ComplexView。當我在DetailsFragment輸入的值(A,B,C),然後按下並彈出一個片段都editTexts具有相同的價值C.我實現的onSaveInstanceStateonRestoreInstanceState自己的版本,並沒有幫助。哪裏不對?如何檢索自定義視圖的狀態?

@Override 
protected Parcelable onSaveInstanceState() { 
    Bundle bundle = new Bundle(); 
    bundle.putParcelable(STATE_SUPER_STATE, super.onSaveInstanceState()); 
    bundle.putString(STATE_DESCRIPTION_TEXT, mDescription.getText().toString()); 

    return bundle; 
} 

@Override 
protected void onRestoreInstanceState(Parcelable state) { 
    if (state instanceof Bundle) { 
     Bundle bundle = (Bundle)state; 

     super.onRestoreInstanceState(bundle.getParcelable(STATE_SUPER_STATE)); 
     mDescription.setText(bundle.getString(STATE_DESCRIPTION_TEXT)); 
    } else { 
     super.onRestoreInstanceState(state); 
    } 
} 
+0

約80%。數據如何輸入? – 2014-09-23 15:18:03

回答

5

發生這種情況的原因是,EditTextComplexView股與景觀的每個其他實例的ID的每個實例內。當你的ComplexView發送保存/恢復事件給它的孩子時,事情會與共享相同ID的視圖有點時髦。

要解決這個問題,你需要阻止狀態保存/恢復派遣到您ComplexView的孩子除了覆蓋保存和恢復方法。

你可以做到這一點,像這樣:

@Override 
protected void dispatchSaveInstanceState(SparseArray<Parcelable> container) { 
    dispatchFreezeSelfOnly(container); 
} 

@Override 
protected void dispatchRestoreInstanceState(SparseArray<Parcelable> container) { 
    dispatchThawSelfOnly(container); 
} 

現在,當你ComplexView恢復或保存它的狀態,它會保存或恢復它自己的狀態;你告訴它你會自己處理和挽救孩子。

西里爾Mottier剛剛張貼在此here一些好的幻燈片。這件作品提到這個問題是在我認爲,我們需要看到更多的代碼的方式。

相關問題