2012-03-30 59 views
2

我已成功將我的TabActivity轉換爲FragmentActivity,標籤內容爲碎片。我運行兩個問題:Android FragmentActivity和標籤問題

  1. 我的每個選項卡都包含EditText's。當我更改TAB1上的EditText的值時,切換到TAB2,然後切換回TAB1,EditText的值已被重置。

  2. 如果從我的選項卡片段之一開始一個新的活動,然後返回到現有的FragmentActivity,那麼標籤內容將消失。使用TabHost,這就是爲什麼我花了一切轉化爲碎片的時間...

關於#1,當我最初有這個問題,我假設的問題是與savedInstanceState做。我跟着谷歌的example準確,使用的onCreate)我FragmentActivity以下(:

initialiseTabHost(savedInstanceState); 
if (savedInstanceState != null) { 
    mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab")); 
} 

此外,這裏是我的onSaveInstanceState()我FragmentActivity的方法:

protected void onSaveInstanceState(Bundle outState) { 
    outState.putString("tab", mTabHost.getCurrentTabTag()); 
    super.onSaveInstanceState(outState); 
} 

這裏是什麼人我標籤Fragment的外表如下:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    if (container == null) { 
     return null; 
    } 

    return (LinearLayout) inflater.inflate(R.layout.priority_boxes_tab, 
      container, false); 
} 

public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    setRetainInstance(true); 

    ArrayList<Supply> list = new ArrayList<Supply>(); 

    // More code here 

} 

我應該做其他事嗎?我在屏幕上有大約15個EditText字段。我是否需要以某種方式保存所有這些值並進行設置,以便字段將在下次重新填充這些值?

關於#2,我不知道我能做些什麼。有沒有人有什麼建議?

謝謝!

回答

2

我只能回答第一個問題。是的,如果你想恢復每個edittext的內容,你必須手動保存。如果不需要跨應用程序運行保留它們,請將它們保存在onSaveInstanceState的捆綁包中,並將它們恢復爲onCreate和/或onRestoreInstanceState。如果您需要這些值是持久的,請使用SharedPreferences或將它們寫入其他文件或數據庫。首選項可能是最簡單的。

+0

我會試試這個,謝謝。使用TabHost會更容易,它會記住每個選項卡中的值,但現在已棄用,因此使用時沒有任何意義。幸運的是,每個選項卡上都有一個靜態數量的EditText字段。然而,對於動態數量的EditText字段,這將變得困難,但是... – littleK 2012-04-02 03:05:14