0

我的應用程序有兩個活動:MasterActivityDetailActivityMasterActivity有兩種可視化模式:列表模式映射模式。一個操作欄項目在它們之間切換。活動之間維持狀態

當用戶進入DetailActivity並返回時,我想維持所選的可視化模式。在開始時,我使用了SharedPreferences,但是即使在設備啓動或長時間不活動的時間之後,用戶也會恢復以前的可視化模式,這並不是我的意思。

然後我切換到BundleonSaveInstanceState但是,當上DetailActivity後退按鈕用戶點擊,onCreateBundle永遠是空的,所以我不能恢復到以前的可視化模式,它總是回覆到列表中的一個。

應用程序使用ToolbarAndroidManifest.xml配置這樣的:

<activity 
    android:name=".ui.MasterActivity" 
    android:label="@string/title_activity_master" 
    android:theme="@style/AppTheme.NoActionBar"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
<activity 
    android:name=".ui.DetailActivity" 
    android:parentActivityName=".ui.MasterActivity" 
    android:theme="@style/AppTheme.NoActionBar"> 
    <meta-data 
     android:name="android.support.PARENT_ACTIVITY" 
     android:value="it.returntrue.revalue.ui.MasterActivity" /> 
</activity> 
+0

你可以添加該方法的代碼:在您的DetailActivity公共布爾onOptionsItemSelected(MenuItem項)? – Christopher

回答

0

不知道爲什麼onSaveInstanceState不會爲你工作。您的代碼將是這樣的:

class MasterActivity extends Activity { 
    private int mode; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (savedInstanceState != null) 
      mode = savedInstanceState.getInt("mode"); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 

     if(mode == 1) { 
      //list mode 
     } else { 
      // map mode 
     } 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putInt("mode", mode); 
    } 
} 

儘管如此,考慮使用Androjeta框架(由我維護)。它配備了多項功能,包括@Retain,你可以在你的情況下使用:所以你需要創建一個太

class MasterActivity extends BaseActivity { 
    @Retain 
    int mode; 

    @Override 
    protected void onResume() { 
     super.onResume(); 

     if(mode == 1) { 
      //list mode 
     } else { 
      // map mode 
     } 
    } 
} 

注意的是,這裏MasterActivityBaseActivity延伸。請按照鏈接瞭解詳情。

+0

我的代碼與您的代碼幾乎完全相同。問題是'onCreate'的'savedInstanceState'始終爲空。 – Alessandro

+0

我認爲這種行爲是因爲「父活動」功能。 [Here](http://stackoverflow.com/questions/12276027/how-can-i-return-to-a-parent-activity-correctly)是stackoveflow上的問題 –

0

我有兩種方法。它基本上是相同的,但在不同的你如何存儲數據

  1. 使用Singleton
  2. 讓您sharedprefs模式,因爲它是

兩個場合,在Activity's onDestroy方法刪除該值。