我有一个使用startActivityForResult()
调用活动B(FragmentActivity)的活动A.在通过调用finish()
完成活动B之前,我使用setResult()
。尽管如此,onActivityResult()
并未被调用。我不知道我做错了什么,因为我没有做任何非传统的事情,或者这是一个Android错误。
在此处查看了一些建议,我已经检查过我的清单文件中的任何位置都没有android:launchMode="singleInstance"
或android:noHistory="true"
。
从A:
调用活动B. Intent intent = new Intent(getActivity(), ActivityB.class);
startActivityForResult(intent, MY_RESULT);
完成活动B:
Intent intent = new Intent();
setResult(Activity.RESULT_OK, intent);
finish();
在活动A中覆盖onActivityResult()
:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
Toast.makeText(getApplication(), "toast", Toast.LENGTH_LONG).show();
}
修改1
我评论了几乎所有活动B的代码(见下文),使A完好无损,问题仍然存在。所以,A肯定会做一些导致问题的奇怪事情。更糟糕的是,我已经完成了其他活动(使用相同的代码)而没有任何问题! A扩展ExpandableListActivity
,但我不明白这些代码中的任何代码会导致onActivityResult()
中出现问题。 Logcat并没有给我任何有用的东西。
这是为活动B测试的代码,为了后人的缘故(虽然看起来问题出在A中):
public class ActivityB extends FragmentActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_activityb);
Intent intent = new Intent();
intent.putExtra("data", "Hello from ActivityB");
setResult(Activity.RESULT_OK, intent);
finish();
}
}
答案 0 :(得分:0)
尝试此操作并验证您的代码:
ActivityA.java
public class ActivityA extends Activity{
private static final int MY_RESULT = 0;
private Button btnStart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
btnStart=(Button)findViewById(R.id.btnstart);
btnStart.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(this, ActivityB.class);
startActivityForResult(intent, MY_RESULT);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Toast.makeText(getApplication(), data.getStringExtra("data"), Toast.LENGTH_LONG).show();
}
}
ActivityB.java
public class ActivityB extends FragmentActivity{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
Intent intent = new Intent();
intent.putExtra("data", "Hello from ActivityB");
setResult(Activity.RESULT_OK, intent);
finish();
}
}
注意:请确保您已在清单文件中添加了该活动。
答案 1 :(得分:0)
好的,感谢所有指出我正确方向的人。我找到了解决方案。问题是我在startActivityForResult()
中正在进行DialogFragment
所以我应该这样做
getActivity().startActivityForResult()
而不仅仅是
startActivityForResult()
然后按预期工作。