Android: setResult 未将结果返回到 Parent Activity
Android: setResult not returning result to Parent Activity
我使用 startActivityForResult 从 parent activity 开始了 child activity。在 child activity 中执行所需的功能后,我使用 setResult 设置结果。但是我没有在 parent activity 从 child activity.
得到结果
这是我的代码。
这是我从 parent activity 调用 child activity 的方式。
Intent i = new Intent(MainActivity.this, Child.class);
i.putExtra("ID", intID);
i.putExtra("aID", aID);
i.putExtra("myMsg", myMsg);
startActivityForResult(i, 1);
这就是我 child activity.
设置结果的方式
@Override
public void onBackPressed() {
super.onBackPressed();
Intent resultInt = new Intent();
resultInt.putExtra("Result", "Done");
setResult(Activity.RESULT_OK, resultInt);
finish();
}
这是我的 onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if (resultCode == Activity.RESULT_OK) {
if(data!=null) {
Toast.makeText(MainActivity.this, "Data received", Toast.LENGTH_SHORT).show();
}
}
}
}
这里当我检查 resultCode==Activity.RESULT_OK 时给出错误。
我还检查了在此 if 条件之外传递的意图及其返回的 null。
<activity
android:name=".MainActivity"
android:label="Main"
android:parentActivityName=".MainPage"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="org.mydomain.mydomain.MainPage" />
</activity>
<activity
android:name=".Child"
android:label="Child"
android:parentActivityName=".MainActivity"
android:theme="@style/AppTheme1">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="org.mydomain.mydomain.MainActivity" />
</activity>
谁能帮我解决这个问题。
尝试不同的 Intent 构造函数。像这样:
Intent resultIntent = new Intent(RESULT_NAME, Uri.parse("data"));
setResult(RESULT_OK, resultIntent);
finish();
原因是因为它可能正在寻找Uri
类型的数据。
检查 this。
我想你错过了一些编码部分。
您的代码排列看起来不正确。
您必须创建一个变量来接收从 childActivity 传递的数据。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == 1) {
String ReceiveData = data.getStringExtra("Result"); // you have to receiveData
if(ReceiveData !=null) {
Toast.makeText(MainActivity.this, "Data received", Toast.LENGTH_SHORT).show();
}
}
}
}
修改你的onBackPressed()
方法
@Override
public void onBackPressed() {
Intent resultInt = new Intent();
resultInt.putExtra("Result", "Done");
setResult(Activity.RESULT_OK, resultInt);
super.onBackPressed();
}
原因:Backpress 操作在将结果发送给父级之前执行了他的任务activity......
在你的父级中写入 finish() Activity。
我使用 startActivityForResult 从 parent activity 开始了 child activity。在 child activity 中执行所需的功能后,我使用 setResult 设置结果。但是我没有在 parent activity 从 child activity.
得到结果这是我的代码。
这是我从 parent activity 调用 child activity 的方式。
Intent i = new Intent(MainActivity.this, Child.class);
i.putExtra("ID", intID);
i.putExtra("aID", aID);
i.putExtra("myMsg", myMsg);
startActivityForResult(i, 1);
这就是我 child activity.
设置结果的方式 @Override
public void onBackPressed() {
super.onBackPressed();
Intent resultInt = new Intent();
resultInt.putExtra("Result", "Done");
setResult(Activity.RESULT_OK, resultInt);
finish();
}
这是我的 onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if (resultCode == Activity.RESULT_OK) {
if(data!=null) {
Toast.makeText(MainActivity.this, "Data received", Toast.LENGTH_SHORT).show();
}
}
}
}
这里当我检查 resultCode==Activity.RESULT_OK 时给出错误。 我还检查了在此 if 条件之外传递的意图及其返回的 null。
<activity
android:name=".MainActivity"
android:label="Main"
android:parentActivityName=".MainPage"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="org.mydomain.mydomain.MainPage" />
</activity>
<activity
android:name=".Child"
android:label="Child"
android:parentActivityName=".MainActivity"
android:theme="@style/AppTheme1">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="org.mydomain.mydomain.MainActivity" />
</activity>
谁能帮我解决这个问题。
尝试不同的 Intent 构造函数。像这样:
Intent resultIntent = new Intent(RESULT_NAME, Uri.parse("data"));
setResult(RESULT_OK, resultIntent);
finish();
原因是因为它可能正在寻找Uri
类型的数据。
检查 this。
我想你错过了一些编码部分。
您的代码排列看起来不正确。
您必须创建一个变量来接收从 childActivity 传递的数据。
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { if (requestCode == 1) { String ReceiveData = data.getStringExtra("Result"); // you have to receiveData if(ReceiveData !=null) { Toast.makeText(MainActivity.this, "Data received", Toast.LENGTH_SHORT).show(); } } } }
修改你的onBackPressed()
方法
@Override
public void onBackPressed() {
Intent resultInt = new Intent();
resultInt.putExtra("Result", "Done");
setResult(Activity.RESULT_OK, resultInt);
super.onBackPressed();
}
原因:Backpress 操作在将结果发送给父级之前执行了他的任务activity......
在你的父级中写入 finish() Activity。