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方法删除该值。