2011-06-09 80 views
0

我有一個名爲MyView的自定義視圖,它從XML佈局擴展其內容。在XML中,我有一個TextView,其ID是「文本」。我的活動中有2個MyViews。所以有2個ID爲「text」的視圖。這導致Android的onSaveInstanceState實現問題 - 只有一個TextView被保存。如何解決這個問題?我的自定義視圖不保存其狀態

回答

0

簡單的答案是更改您的一個「文本」視圖的ID。

+0

如何做到這一點? – fhucho 2011-06-09 12:43:00

+0

那麼,你在你的問題中聲明你有兩個不同的視圖,其ID爲「text」。您需要將其中一個更改爲具有不同的ID。沒有看過你的代碼來知道你是如何實現的,我不能再比這個更具體。 – 2011-06-09 12:46:00

+0

我有一個從myview.xml加載佈局的MyView類。在myview.xml中有一個id =「text」的TextView。在activity.xml中我有2個MyViews。它們中的每一個都會從myview.xml中加載它的內容。所以如果我在myview.xml中修改id,我的MyViews的_both_將會有一個帶有新id的TextView。 – fhucho 2011-06-09 12:58:21

0

我有這個問題,我不喜歡改變ID的想法。經過大量的研究,我發現了一個解決方案,覆蓋了onAttachedToWindow()方法,並且僅在其內部更改了對象值,而不是在onRestoreInstanceState中進行更改。我希望它有幫助。

@Override 
protected Parcelable onSaveInstanceState(){ 
    bundle = new Bundle(); 
    bundle.putParcelable("instanceState", super.onSaveInstanceState()); 
    bundle.putString("Text", txt_edit.getText().toString()); 
    return bundle; 

} 

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

      state = bundle.getParcelable("instanceState"); 
    } 
    super.onRestoreInstanceState(state); 
} 

@Override 
protected void onAttachedToWindow() { 
    if (bundle != null){ 
     txt_edit.setText(bundle.getString("Text")); 
    } 

    super.onAttachedToWindow(); 
}