0

このチュートリアルhttp://www.vogella.com/articles/AndroidIntent/article.htmlに従って、startActivityForResult でアクティビティを呼び出して親アクティビティにデータを転送しています。

基本的に、onBackPressedではなくクリックされたいくつかのボタンで、親アクティビティを終了しようとしています。もっと簡単な方法があるかどうかはわかりません。このような:

MainPage to NewTarget
            NewTarget to Target

// onBackPressed
            Target to NewTarget

// onButtonClick on TargetActivity
            Target to MainPage

問題は、Target アクティビティの終了ではなく、NewTarget アクティビティのボタンをクリックしたときに onActivityResult が呼び出されることです?? 逆であってはいけませんか?

「NewTarget」クラスには、onClick アクティビティを呼び出す必要があるボタンがあります。また、「ターゲット」という名前のアクティビティに関するフィードバックも必要です。これは、戻るボタンまたはその他の方法で終了したようなものです (ポイント クリックでそのアクティビティを終了する必要があり、「finish()」と呼びます)。

NewTarget アクティビティから:

public void savingClick(View v) {
    Intent targetIntent = new Intent(this, Target.class);
    targetIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivityForResult(targetIntent, 5);
}

オン ターゲット アクティビティ:

@Override
public void finish() {
if(ClickCheck) {
    Log.d("Target","ClickCheck");
    // Prepare data intent 
    Intent data = new Intent();
    data.putExtra("returnKey", "click");
    // Activity finished ok, return the data
    setResult(RESULT_OK, data);
}
super.finish();

}

最後に、NewTarget アクティビティについて:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.d("NewTarget","requestCode: " + requestCode);
    Log.d("NewTarget","resultCode: " + resultCode);
    if(requestCode == 5 && resultCode == RESULT_OK) {
        Log.d("NewTarget","data: " + data.hasExtra("returnKey"));
        if(data.hasExtra("returnKey"))
            this.finish();
    }
    super.onActivityResult(requestCode, resultCode, data);
}

そして、私は値をチェックします:

// these lines have appeared when i clicked on button to startActivityForResult
requestCode: 5
resultCode: 5
// ClickCheck line has appeared on Target activity finished.
// data: data.hasExtra("returnKey")); line has never been appeared.

それで、取引は何ですか?私は何を見落としていますか?ご協力いただきありがとうございます。

4

1 に答える 1

1

これをする:

MainPage to NewTarget
        NewTarget to Target

// onBackPressed
        Target to NewTarget

// onButtonClick on TargetActivity
        Target to MainPage

startActivityForResult()にデータを返す必要がない限り、Targetを使用する必要はありませんNewTarget。通常の動作では、「戻る」を押すと、TargetTargetが呼び出さfinish()れ、に戻りNewTargetます(これはあなたが望むもののようです)。最後の動作を取得するには、次のコードを使用する必要がありますTarget.onButtonClick()

Intent intent = new Intent(this, MainPage.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();

これにより両方が終了NewTargetTarget、次に現在のMainPageアクティビティが終了し、アクティビティの新しいインスタンスが作成されますMainPage(launchModeのMainPageが「標準」の場合)。

これを試して。

于 2012-06-28T15:04:13.870 に答える