0

私のアプリには、MasterActivityDetailActivityという2つのアクティビティがあります。 MasterActivityには、リストモードマップモードの2つの視覚化モードがあります。アクションバー項目は、アクションバー項目を切り替えます。アクティビティ間の状態を維持する

ユーザーがDetailActivityに入って戻ったときに、選択した視覚化モードを使用したいと思います。最初はSharedPreferencesを使用していましたが、デバイスを起動しても、長い非アクティブな時間が経過しても、以前の視覚化モードに戻ることはありませんでした。

は、それから私は、ユーザーがDetailActivityの戻るボタンをクリックすると、onCreateBundleので、私は、以前の可視化モードを復元することはできません常に空であり、それは常にリスト1に戻り、BundleonSaveInstanceStateに切り替えたが。

<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のpublic boolean onOptionsItemSelected(MenuItem item)? – Christopher

答えて

0

ないonSaveInstanceStateはあなたのために動作しない理由を確認してください。

アプリケーションはToolbarAndroidManifest.xmlを使用していますが、そのように設定されています。それにもかかわらず、(私が維持される)Androjetaフレームワークを使用することを検討

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); 
    } 
} 

:あなたのコードは次のようになります。ここMasterActivityBaseActivityから延び

class MasterActivity extends BaseActivity { 
    @Retain 
    int mode; 

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

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

注意ので、あなたもそれを作成する必要があります。それはあなたがあなたのケースで使用することができます@Retainを含む多数の機能が付属しています。詳細は、リンク先をご覧ください。

+0

私のコードはあなたとほぼ同じです。問題は 'onCreate'の' savedInstanceState'が常にnullです。 – Alessandro

+0

私はこの動作が '親アクティビティ'機能のためにあると思います。 [Here](http://stackoverflow.com/questions/12276027/how-can-i-return-to-a-parent-activity-correctly)はstackoveflowの問題です –

0

私には2つのアプローチがあります。それは基本的に、あなたはそれが

あるようActivity's onDestroy法上の値を削除し、両方の機会にあなたのsharedprefsモデルをしてくださいSingleton

  • を使用

    1. データを保存する方法については同じですが、違うのです。

  • 関連する問題