2013-07-30 44 views
1

我的應用程序有兩個選項卡並在選項卡之間切換,使我失去了輸入的所有內容當前旅程所以我修改了我的代碼以保存狀態。保存實例以避免在選項卡之間丟失數據切換

enter image description here

package com.test.testing; 


public class Trip2 extends Fragment { 
    EditText nameOfInf;  
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     if ((savedInstanceState != null) && (savedInstanceState.getString("nameof") != null)) { 
      Toast.makeText(getActivity(), savedInstanceState.getString("nameof"),2000).show(); 
     } 
     else { 
      Toast.makeText(getActivity(), "DIDNT SAVE",2000).show(); 
     } 
     final RelativeLayout mFrame2 = (RelativeLayout) inflater.inflate(R.layout.trip, container, false); 

     final Button btnCalc = (Button) mFrame2.findViewById(R.id.btnCalculate); 

     nameOfInf = (EditText) mFrame2.findViewById(R.id.etName); 
     final EditText tollAmount = (EditText) mFrame2.findViewById(R.id.etToll); 

     btnCalc.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       //DO SOMETHING 
      } 
     }); 
     return mFrame2; 
    } 
@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putString("nameof", nameOfInf.toString()); 
} 
} 

它始終顯示

沒救

如何解決這個問題?

+0

你試過[setRetainInstance()](http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean))?這樣你就不需要管理狀態保存和恢復。 –

+0

很多很好的信息在這裏http://stackoverflow.com/q/151777/1316346 –

回答

3

你不需要setRetainInstance,實際上根本不起作用。

發生什麼事是按下一個選項卡會調用您的TabListener,其中很可能會運行一個replace事務,刪除舊的碎片並丟棄其保存的數據。如果選項卡之前不存在(使用片段標籤來確定該選項卡),則應該只有add,否則應該使用detach/attach。一旦你這樣做,你甚至不需要手動保存文本,因爲視圖狀態被自動保存。

+0

我認爲你要去的地方...我認爲你指的是'attach'和'detach'? 'onTabUnselected'和'onTabSelected'? – Si8

+0

正確。您想要「分離」您選擇的選項卡,並選擇「附加」選項卡(如果它們已經存在)。如果他們不這樣做,則需要「分離」前一個和「添加」新的。 – Delyan

相關問題