2011-02-02 5 views
0

私は以下のようなメニューで基本アクティビティから継承するいくつかのアクティビティを持っています。Android - タブとして機能するメニュー項目

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
     Intent myIntent; 
     switch(item.getItemId()) { 
     case R.id.home: 
      myIntent = new Intent(this, HomeActivity.class); 
      startActivityForResult(myIntent, 0); 
      return true; 
     case R.id.map: 
      myIntent = new Intent(this, GoogleMapsActivity.class); 
      startActivityForResult(myIntent, 0); 
      return true; 
     case R.id.art: 
      myIntent = new Intent(this, ArtActivity.class); 
      startActivityForResult(myIntent, 0); 
      return true; 
     ... 
     default: 
      return super.onOptionsItemSelected(item); 
     } 
    } 

これはうまくいきますが、メニュー項目を選択すると、そのアクティビティの新しいインスタンスが開始されます。 setResult()と一緒にpause()およびresume()を使用して、特定の時間に各アクティビティのインスタンスを1つまたはそれ以下しか持たないようにするにはどうすればよいですか?

具体的には、ユーザーが以前に訪問したアクティビティに戻ったときに、タブのような状態になっている必要があります。

答えて

0

アクティビティのlaunchModeをsingleTaskに設定すると、これを達成できます。しかし、ドキュメントが指摘しているように、これはユーザーにとって予期しない動作を引き起こす可能性があります。ユーザーがヒットすると、前の画面に戻ることが予想されます。このモードを使用する場合は、バック機能を完全にテストしてください。あなたの意図に

+0

まず、感謝を経由して「活動」を開始!これは私が達成しようとしていたものに非常に近いものです。私はその行動に1つの問題があります。私は、アプリケーションの主な意図(アプリケーションの実行で開始するもの)を持っているアクティビティに行って、以前に開いたアクティビティに戻っても、まだ新しいインスタンスを作成しています(または少なくともonCreate –

+0

それは私のonOptionsItemSelected()が実装されている方法と関係がありますか? –

+0

私はそれがあなたのメインと何か関係があると思いますアクティビティもランチャーアクティビティですが、わかりません。onCreateでメインアクティビティを起動するダミーランチャアクティビティを作成することができます。 –

0

使用.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_SINGLE_TOP)とちょうどお返事のためのstartActivity

+0

これは、上記と同じ例外の問題を解決します。アプリケーションの主な目的(アプリケーションの実行から始まり、以前に開いたアクティビティに戻る)を持っている場合、まだ新しいインスタンスを作成しています(または少なくともonCreate()を呼び出しています)。ナビゲートメイン以外のタブの間で –

+0

あなたは活動を終了していますか? –

関連する問題