0

我正在构建一个应用程序,其中第一个 Activity 通过startActivityByResult. 完成一些设置后,我需要将设置结果发回。

所以我重写了第二个 Activity 的onPause()方法,我得到了意图,putExra然后通过setResult().

回到第一个活动。onActivityResult肯定被调用了。我之前设置了 resultCode,但意图数据为空。我不知道出了什么问题。

这是我的代码:

第一个活动

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.e("page1", requestCode + "_");
    Log.e("page1", resultCode + "_");
    Log.e("page1", (data == null) + "_");
    // if ((requestCode == 1) && (data != null)) {
    if (data != null) {
        String size = data.getStringExtra("size");
        Log.e("switch", size + "_");
        switch (size.charAt(0)) {
        case '1': {
            text.setTextSize(10);
        }
            break;
        case '2': {
            text.setTextSize(20);
        }
            break;
        case '3': {
            text.setTextSize(30);
        }
            break;
        }
    }
}

我的第二个活动

    @Override
protected void onPause() {

    Intent intent = getIntent();
    Log.e("prefs", (intent == null) + "_");
    intent.putExtra("size", size);
    setResult(3, intent);
    super.onPause();
}

我已经在 LogCat 中进行了测试。在第二个活动中。即将发送的意图绝对不为空。但是当它进入第一个活动时。Null 刚刚返回。这让我真的发疯了。

4

2 回答 2

1

您的代码有问题在String size = data.getStringExtra("size");这一行。你应该改变它String size = data.getExtras.getString("size");

在您的第一个活动中:

Intent intent = new Intent(context,SecondActivity.class);
startActivityForResult(intent, REQUEST_CODE);

SAVE在您的第二个活动中,在其侦听器中创建一个名为的按钮;

        Intent result = new Intent();
        Bundle bundle = new Bundle();

        bundle.putString("keyName", "KeyValue");

        result.putExtras(bundle);
        setResult(RESULT_OK,result);
        finish();

再次在您的第一个活动的onActivityresult方法中:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(resultCode==RESULT_OK){
        if(requestCode == REQUEST_CODE){
            Log.d("Activity Result", data.getExtras.getString("keyName");
        }
    }
}
于 2012-05-08T12:13:29.687 回答
0

你能试试这个。您希望在所有情况下手动暂停并自动后按完成活动,因此最好将您的意图数据保存在 onDestroy

    @Override
    protected void onPause() {
        super.onPause();
        finish();
    }

    @Override
    public void onDestroy() {
        Intent intent = getIntent();
        intent.putExtra("size", size);
        setResult(3, intent);
        super.onDestroy();
    }
于 2012-05-09T11:08:39.083 回答