2013-07-30 1 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 в противном случае. Как только вы это сделаете, вам даже не придется сохранять текст вручную, так как состояние View автоматически сохраняется.

+0

Я думаю, вы идете куда-то с этим ... Я думаю, вы имеете в виду 'attach' и' detach'? 'onTabUnselected' и' onTabSelected'? – Si8

+0

Правильно. Вы хотите, чтобы вы отключали вкладки, которые вы не выбираете, и вкладки 'attach', которые вы выбираете, если они уже существуют. Если это не так, вам нужно «отсоединить» предыдущий и «добавить» новый. – Delyan

Смежные вопросы