onActivityResult数据传输

时间:2012-06-28 14:18:27

标签: android android-intent android-activity

我正在遵循本教程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

当我点击NewTarget活动上的按钮而不是Target活动完成时,问题是onActivityResult调用?不应该相反吗?

在“NewTarget”类中,我有一个需要调用onClick活动的按钮。而且我还需要一些关于活动的feedBack,名为“Target”,就像它已经通过后退按钮或其他方式完成(我需要在某些点上点击完成该活动,我称之为“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.

那是什么交易?我在俯瞰什么?提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

要做到这一点:

MainPage to NewTarget
        NewTarget to Target

// onBackPressed
        Target to NewTarget

// onButtonClick on TargetActivity
        Target to MainPage

除非您需要从startActivityForResult()返回Target的某些数据,否则无需使用NewTarget。正常的行为是,在Target中按“后退”只会在目标上调用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为{ {1}}是“标准”)。

试试这个。