如何使用 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);
我创建了一个库,它的库有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);