0

問題:私は4つの活動A、B、C、Dを言いました。

A-呼び出し->B-呼び出し->C

新しいアクティビティの呼び出しは、startActivityForResult(...、...)を使用して行われます

ここでの私の問題は、アクティビティCで単にfinishを呼び出すと、onActivityResult(...)が期待どおりに呼び出されることです。しかし、CとstartActivity(D、...);を終了したいと思います。

// finish()を呼び出しているCからのコード。

public void onSettingsClick(View v) {
    System.out.println("My Parent ====== "+getParent());
    if (getParent() == null) {
        setResult(Activity.RESULT_CANCELED, new Intent());
    } else {
        getParent().setResult(Activity.RESULT_CANCELED,new Intent());
    }
     finish();
     StartActivityUtil.launchSettings(this);// call to Activity D is done here
}

Plz助けてください、別のソルを試しました。しかし運がない:(

また、私は常にgetParent()=nullを取得します

4

3 に答える 3

1

startActivityForResult(D)を開始し、onActivityResultでCを終了する必要があります(オプションで結果をDからCに転送します)

于 2012-03-30T13:48:54.343 に答える
1

理解する必要があります。finishとstartActivityは非同期メソッドです。つまり、これらのメソッドを呼び出すことは、finishがすぐに呼び出されることを示すものではなく、制御がstartActivityに移動し、これらのコマンドがキューに追加され、システムとして開始されます。アクティビティDは、結果を親アクティビティに返さずに、この状況を取り除くために、最初にアクティビティCを終了し、BのonActivityResultで条件に従ってアクティビティDを開始します。

于 2012-03-31T06:12:43.783 に答える
0
public void onSettingsClick(View v) {
    System.out.println("My Parent ====== "+getParent());
    if (getParent() == null) {
        setResult(Activity.RESULT_CANCELED, new Intent());
    } else {
        getParent().setResult(Activity.RESULT_CANCELED,new Intent());
    }

    // just toggle these 2 lines. is it works?
    StartActivityUtil.launchSettings(this);// call to Activity D is done here
    finish();
}
于 2012-03-30T13:50:10.273 に答える