2016-09-30 148 views
0

我有一個片段和活動,將活動代碼如下所示:值爲空或默認值

public class ActivityA extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 


    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putInt("intTest", 10); 
     outState.putString("stringTest", "hello"); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_admin); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     if (savedInstanceState != null){ 

      int test = savedInstanceState.getInt("intTest"); 
      String strTest = savedInstanceState.getString("stringTest"); 
     } 
    } 
} 

和片段看起來是這樣的:

public class FragmentA extends Fragment { 
    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
    outState.putInt("intTest", 10); 
     outState.putString("stringTest", "hello"); 

    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView; 
     rootView = inflater.inflate(R.layout.fragment_a, container, false); 

     if (savedInstanceState != null){ 
     int test = savedInstanceState.getInt("intTest"); 
       String strTest = savedInstanceState.getString("stringTest"); 
    } 

     return rootView; 
    } 
} 

(代碼插件簡化爲更好地理解)

好吧,在我的智能手機我有Android的7,我可以在2分割窗口顯示2型動物的應用程序,所以當我按下這個按鈕,我公頃已經我ActivityA我在執行FragmentA,我的代碼的執行情況如下:中FragmentAonSaveInstanceState被稱爲然後的ActivityAonCreate被調用,在

if (savedInstanceState != null){ 

       int test = savedInstanceState.getInt("intTest"); 
       String strTest = savedInstanceState.getString("stringTest"); 
      } 

問題的部分輸入是該值savedInstanceState是空ø默認情況下,例如,用於stringsnullints0

我認爲這種行爲發生時,應用程序保存其狀態,而不是隻有當我按下按鈕來分割窗口。

的問題是,爲什麼裏面savedInstanceState值是空或默認值?我該如何解決它們?

感謝

P.S onSaveInstanceState在ActivityA不執行,只是在FragmentA執行onSaveInstanceState,我想這也是一個奇怪的行爲。

編輯:我認爲問題是,在FragmentAonSaveInstanceState不叫。但我不知道爲什麼它不被稱爲。

+0

如果您可以驗證哪些方法正在調用將有所幫助。附加調試器並使用一些簡單的登錄到調試控制檯而不暫停應用程序的斷點。 – Karakuri

+0

我在問題中說過,調用的方法是FragmentA中的onSaveInstance,然後是ActivityA上的OnCreate。或者您是指完整的執行流程? – RdlP

回答

0

onSaveInstanceState當Android系統本身需要破壞的活性或片段,例如僅稱爲電話或低內存。

此外,把你的價值在捆綁之前調用super.onSaveInstanceState,之後,該狀態已被保存。

+0

我已經看到很多問題,這裏在stackoverflow,許多例子和'super.onSaveInstanceState'必須調用之前添加您的自定義值的保存實例,但我已經嘗試在開始和結束時,結果是相同 – RdlP