我正在尝试将子活动的数据发送到父级。但不知何故,onActivityResult(..)没有被调用。这是代码
家长活动
selectedText.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
Intent intent = new Intent(Parents.this,Child.class);
startActivityForResult(intent, 1);
}
return true;
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
if (data.hasExtra("selText")) {
selectedText.setText(data.getExtras().getString(
"selText"));
}
break;
}
}
子活动:我可以看到setResult()中设置的选定值。但是在儿童活动结束后,它不会回到父母活动。
textListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int myItemInt,
long arg3) {
selectedFromList =(String) (textListView.getItemAtPosition(myItemInt));
Intent data = new Intent();
data.putExtra("selText", selectedFromList);
setResult(RESULT_OK,data);
finish();
}
});
答案 0 :(得分:76)
对于遇到相同问题的任何人,如果出现onActivityResult
症状,以下情况可能会导致此问题。
startActivityForResult()
,请勿使用startActivity()
。onBackPressed
方法中执行某项操作,则super.onBackPressed();
必须位于方法的最后一个位置,而不是第一行。 (我的情况是花5个小时)android:launchMode="singleInstance"
以创建意图。noHistory="true"
。setResult()
。finish()
来关闭活动。使用finishActivity()
关闭被叫活动。requestCode
大于零。负值不起作用。答案 1 :(得分:10)
我发现了错误。我在manifest.xml的下面有一行用于子活动。
android:launchMode="singleInstance"
删除此行后。它的工作就像一个魅力!
感谢大家的意见和建议。
答案 2 :(得分:1)
将我的调用活动的清单从android:launchMode="singleInstance"
更改为android:launchMode="singleTop"
为我解决了问题。
答案 3 :(得分:1)
用于启动新Avtivity的意图无法使用标记Intent.FLAG_ACTIVITY_NEW_TASK
进行设置,因为根据android developer documentation:
当呼叫者请求结果时,不能使用此标志 正在推出的活动。
答案 4 :(得分:1)
使用 singleTop 而不是 singleInstace 作为 launchMode ,因为它在同一任务中维护活动。
答案 5 :(得分:0)
不确定这是否属于您的情况,但在启动子活动时请务必使用startActivityForResult(intent)
,而不是startActivity();
答案 6 :(得分:0)
onPause影响onActivityResult。
其中一个角落案例可能是:
我的情况不同而且很愚蠢:问题出在onPause上,finish
调用并结束活动。删除它并且运行良好。
@Override
protected void onPause() {
super.onPause();
finish(); // this line causing the issue removed it.
}
答案 7 :(得分:0)
我的情况有点复杂,我意识到我错误地使用了一个静态引用,该静态引用指向子活动中按钮侦听器的第一个实例。
一开始它是有效的,但是当用户从父级活动返回时,onActivityResult
没有被调用。
替换静态引用是解决方法
答案 8 :(得分:-1)
删除主类中的OnActivityResult()
方法,它完美运行...
的 MainActivity-&GT;&GT;&GT;&GT;片段强>