如何使用 intent startactivityforresult 方法?

How to use intent startactivityforresult method?

我创建了一个库,它的库有4个activity。我有意在 activity 之间移动,但我不知道如何将结果数据发送到主应用程序? 我这样开始我的图书馆:

Intent intent = new Intent(this, LibraryFirstActivity.class);
startActivityForResult(intent, 1);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1){
        if (resultCode == RESULT_OK){
            String result = data.getStringExtra("result");
            Log.d("result", result);
        }
        if (resultCode == RESULT_CANCELED){
            Toast.makeText(this, "CANCELED", Toast.LENGTH_SHORT).show();
        }
    }
}

我启动 LibraryFirstActvity。在 LibraryFirstActivity 中,我转到 LibrarySecondActivity:

Intent intent = new Intent(this, LibrarySecondActivity.class);
startActivity(intent);
finish();

但我也可以去 LibraryThirdActivity 或其他。 那么我如何 return 到主应用程序 onActivityResult() 方法?

1) 从您的 FirstActivity 使用 startActivityForResult() 方法调用 SecondActivity

例如:

Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1);

2) 在您的 SecondActivity 中,将您想要 return 的数据设置回 FirstActivity。如果你不想 return 返回,请不要设置。

例如:在SecondActivity如果要发回数据:

Intent returnIntent = new Intent();
returnIntent.putExtra("result", result);
setResult(RESULT_OK,returnIntent);
finish();

The result can be of type : String / boolean / int / long / Bundle ...

如果你不想return数据:

Intent returnIntent = new Intent();
setResult(RESULT_CANCELED, returnIntent);
finish();

3) 现在在您的 FirstActivity class 中为 onActivityResult() 方法编写以下代码。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if(resultCode == RESULT_OK){
            String result=data.getStringExtra("result");
        }
        if (resultCode == RESULT_CANCELED) {
            //Write your code if there's no result
        }
    }
}//onActivityResult

在 librarySecondActivity 中,您还应该启动 activityForResult 并使用 onActivityResult 获取值。然后,您将信息从第三个发送回第二个,然后从第二个发送回第一个(主要)。使用相同的逻辑,您可以添加第四个。递归思考!

查看 this link 了解有关 startActivityForResult()

的更多详细信息

你必须@Override onActivityResult()这样:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CONST_REQUEST_CODE) {
        // your code
    }        
}

startActivityForResult()为:

startActivityForResult(intentName, CONST_REQUEST_CODE);