3

私は多くの異なる活動の間を行き来するアプリを持っています。私のメインアクティビティである1つのアクティビティには、アプリ内のどのアクティビティがメインアクティビティを起動したかに依存する動作があります。他のすべてのアクティビティに「launcehdFrom」というエクストラをインテントに入れて、メインアクティビティを呼び出すhteアクティビティの名前を持つ文字列を含めることで、これをログに記録できると思いました。私が遭遇した問題は、その値が設定されると、別のアクティビティによってオーバーライドできないことです。私はこれを行うための良い簡単な方法を見つけていません。何かアドバイス??

次のコードは、私のメインアクティビティの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);
}

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

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

1 に答える 1

9

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

于 2011-06-29T14:54:01.770 に答える