2011-06-28 6 views
3

私はさまざまなアクティビティの間を行き来するアプリを持っています。主なアクティビティの1つのアクティビティは、アプリ内のどのアクティビティが主なアクティビティを開始したかによって動作が異なります。私は、他のすべてのアクティビティに、主アクティビティを呼び出すhteアクティビティの名前を持つ文字列を含むインテントに "launcehdFrom"という余分なものを入れることでこれを記録できると考えました。私が遭遇した問題は、いったんその値が設定されると、別のアクティビティによって上書きされないということです。私はこれを行うための良い簡単な方法を見つけたhavne't。何かアドバイス??Android:エキストラをインテントに変更する

は、次のコードは、私の主な活動にonResume()から呼び出され

:これがメインの活動を最初に起動するコードがある

private void processIntentRequest(){ 
    Intent intent = getIntent(); 
    ProcessIntentRequestType caller = (ProcessIntentRequestType)intent.getSerializableExtra("launchedFrom"); 
    switch(caller){ 
     case startUpActivity: 
      load(this.myObj); 
      break; 

     case otherActivity: 
      int uri = integer.parseInt(this.getIntent().getExtras().getString("uri"));   
      load(this.myObj, uri); 
      break; 

     default: 
      load(this.myObj, 1); 
    } 

public void launchMainActivity(Obj myObj){ 
    Intent launchMain = new Intent(this, mainActivity.class); 
    login.putExtra("launchedFrom", ProcessIntentRequestType.startupActivity); 
    startActivity(launchMain); 
} 

これはコードであることスタートアップアクティビティによって少なくとも一度ロードされた後、他のアクティビティからメインアクティビティを起動します。

protected void launchMainActivity(Obj myObj, HelperObj helper) { 
    String uri = helper.uri; 
    Intent mainActivity = new Intent(this, MainActivity.class); 
    mainActivity.putExtra("uri", uri); 
    mainActivityputExtra("launchedFrom", ProcessIntentRequestType.otherActivity); 
    startActivity(mainActivity.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) 
        .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)); 
    finish(); 
} 
+0

インテントから文字列を設定するために使用しているコードを追加できますか? – theisenp

+0

コードがアップされました。文字列でスイッチを使用することはできないので、実際には文字列ではありません。文字列を表すenumです。私はあなたが与えることができる任意のヘルプに感謝します。 – aamiri

答えて

9

startActivityを呼び出すときにFLAG_ACTIVITY_SINGLE_TOPを使用していますが、これにはいくつかの顕著な動作があります。この場合、onNewIntentをオーバーライドし、そこからsetIntentを呼び出します。その後、プラットフォームはonResumeに電話をかけ、getIntentへの呼び出しは新しいインテントを返します。

+0

それはトリックでした!ありがとう! – aamiri

関連する問題