2013-12-23 24 views
0

請看看下面的代碼片段國家不救,當設備旋轉

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.RadioButton; 
import android.widget.RadioGroup; 
import android.widget.RadioGroup.OnCheckedChangeListener; 
import android.widget.SeekBar; 
import android.widget.SeekBar.OnSeekBarChangeListener; 
import android.widget.TextView; 
import android.widget.Toast; 

public class InputFragment extends Fragment { 


    private SeekBar daysAsCustomerSeek; 

    private View view; 

    //Following variables will save the application state and load back 
    //on resume 

    private final String DAYS_AS_CUSTOMER_VALUE_HOLDER = "days as customer value"; 




    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     //Intializing instance variables 
     view = inflater.inflate(R.layout.input, container,false); 



     daysAsCustomerSeek = (SeekBar)view.findViewById(R.id.days_as_customer_seekbar); 

     //Set default max values 
     daysAsCustomerSeek.setMax(210); 
     Log.d("MY_TAG", "Re Created"); 
     return view; 

    } 

    //This method will save the instances 
    @Override 
    public void onSaveInstanceState(Bundle savedInstanceStateBundle) 
    { 
      super.onSaveInstanceState(savedInstanceStateBundle); 

     savedInstanceStateBundle.putInt(DAYS_AS_CUSTOMER_VALUE_HOLDER, daysAsCustomerSeek.getProgress()); 

Log.d("SAVE_LOG", "Instances saved"); 
    } 

    //This method will restore the instances 
    @Override 
    public void onActivityCreated(Bundle savedInstanceStateBundle) 
    { 
     super.onActivityCreated(savedInstanceStateBundle); 

     if(savedInstanceStateBundle!=null) 
     { 

      daysAsCustomerSeek.setProgress(savedInstanceStateBundle.getInt(DAYS_AS_CUSTOMER_VALUE_HOLDER)); 

     } 
     Log.d("LOAD_LOG", "Instances loaded"); 
    } 

} 

當電話的朝向改變(當某一個旋轉設備)這個代碼不恢復保存狀態。但是當後退按鈕被按下時它會發生。我發現爲什麼這種情況發生在Logs上。

12-23 16:41:36.623: D/SAVE_LOG(13078): Instances saved 
12-23 16:41:45.332: D/MY_TAG(13078): Re Created 
12-23 16:41:45.332: D/LOAD_LOG(13078): Instances loaded 
12-23 16:41:45.352: D/LOAD_LOG(13078): Instances loaded 
12-23 16:41:45.842: D/MY_TAG(13078): Re Created 

正如您所見,它將onCreateView()稱爲最後一種方法。因此,所有在onActivityCreated()中完成的操作都被撤消。我試圖通過在onCreateView()末尾添加恢復代碼來解決此問題,但通過說BundleNULL而失敗。

我該如何解決這個問題?

回答

0

覆蓋onSaveInstanceState方法來保存你想保存和onViewCreated方法來檢索他們的進度條或其他部件的狀態

+0

onSaveInstance? –

+0

我的意思onSAveInstance()。回答編輯 –

+0

你有看過代碼嗎?我已經使用它 –

0

你需要重寫onSaveInstanceState(Bundle savedInstanceState),寫你想改變的捆綁應用程序狀態值參數如下:

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    // Save UI state changes to the savedInstanceState. 
    savedInstanceStateBundle.putInt(DAYS_AS_CUSTOMER_VALUE_HOLDER, daysAsCustomerSeek.getProgress()); 
} 

的包基本上存儲NVP ("Name-Value Pair")地圖的方式,它會到的onCreate獲得通過,也onActivityCreated()在那裏你會提取這樣的價值觀:

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    // Restore UI state from the savedInstanceState. 
    // This bundle has also been passed to onCreate. 
    daysAsCustomerSeek.setProgress(savedInstanceStateBundle.getInt(DAYS_AS_CUSTOMER_VALUE_HOLDER)); 

} 

你會經常使用這種技術來存儲實例值的應用程序(selectionsunsavedtext等)。

+0

他正在使用片段。 onRestoreInstacestate方法適用於活動 –

+0

對不起,我現在更新了我的答案!感謝您的通知。 – Hamad