2016-11-07 47 views
0

所以,我知道問題是重複的,但我沒有在這些答案中找到解決方案。 我有一個MainActivity和GameDetailActivity。 GameDetailActivity的MainActivity層次結構父級。這是清單文件聲明:Android:Activity onCreate savedInstanceState allways爲空

<activity 
     android:name=".MainActivity" 
     android:screenOrientation="portrait" 
     android:theme="@style/AppTheme2" 
     android:noHistory="false" 
     > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 

      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".GameDetailActivity" 
     android:theme="@style/AppTheme2" 
     android:parentActivityName=".MainActivity" 
     android:noHistory="false" 
     > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="de.exam.example.MainActivity"/> 
    </activity> 

這裏AppTheme2聲明:

<style name="AppTheme2" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="android:windowActionBar">false</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 

    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
</style> 

這裏回邏輯GameDetailActivity:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      Intent upIntent = NavUtils.getParentActivityIntent(this); 
      if (NavUtils.shouldUpRecreateTask(this, upIntent)) { 
       TaskStackBuilder.create(this) 
         .addNextIntentWithParentStack(upIntent) 
         .startActivities(); 
      } else { 
       NavUtils.navigateUpTo(this, upIntent); 
      } 
      return true; 
     default:break; 
    } 
    return super.onOptionsItemSelected(item); 
} 

,當我按下家了(回「< - 「)GameDetailActivity中的按鈕我總是在MainActivity中獲取savedInstanceState爲null。我不明白爲什麼保存的數據在MainActivity中丟失。

編輯

這裏開始GameDetailActivity代碼:

Intent i = new Intent(getActivity(), GameDetailActivity.class); 
i.putExtra("game", clickedGame); 
startActivity(i); 

有人知道如何解決這一問題?

預先感謝您

+0

將代碼發佈到你開始'GameDetailActivity'的地方。 – earthw0rmjim

+0

檢查此:http://stackoverflow.com/a/15933890/758104 –

+0

@ earthw0rmjim我添加了開始代碼GameDetailActivity,看編輯區域 –

回答

1

瀏覽了一個全新的背疊

當用戶從 另一個應用程序的任務進入您的活動後,按向上鍵,應用程序啓動new task with合適 導航之前返回堆棧。

解決方案

向上導航至父活動

當你調用這個方法,它完成當前的活動,並開始 (or resumes)合適的父活動。如果目標父代 活動位於任務的回退堆棧中,則它是brought forward.它提出的方式 取決於父代活動是否能夠通過 來處理onNewIntent()調用。

Source


@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     // Respond to the action bar's Up/Home button 
     case android.R.id.home: 
      NavUtils.navigateUpFromSameTask(this); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
1

如果設置,以及正在啓動的活動中 當前任務已在運行,然後,而不是發動那 活動的新實例,所有的在其上面的其他活動將被關閉,並且 這個意圖將作爲 新的意圖被傳送到(現在在最上面的)舊活動。 願這將解決你的問題

public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId()== android.R.id.home) { 
     Intent intent = NavUtils.getParentActivityIntent(this); 
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     NavUtils.navigateUpTo(this, intent); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

我已經試過這是,沒有幫助 –

1

savedInstanceState束得到保存在onSaveInstanceState()

onSaveInstanceState()在操作系統銷燬Activity(例如回收資源或因爲配置更改)時被調用,但不保證通過簡單地瀏覽活動來調用它。

+0

你是否建議使用其他變種,如SharedPreference,應用程序類中的靜態字段? –

+0

很難提出一個解決方案,而不知道你想要達到的目標。 'SharedPreferences'可能是持久數據的可能解決方案。如果你想使用'GameDetailActivity'中的數據,你可以將它作爲額外的'Intent'傳遞給它。 – earthw0rmjim