情景:我有一个MainActivity.java
,OtherPageForFragments.java
和一个位于OtherPageForFragments.java
在MainActivity.java
中,我编写了以下代码来启动活动并获得结果
onActivityResult(int requestCode,int resultCode,Intent data)
是
startActivityForResult(new Intent(this, OtherPageForFragments.class),REQUEST_CODE_MAP);
在片段类的onDestroy()
中,我写了这个:
public void onDestroyView() {
// TODO Auto-generated method stub
super.onDestroyView();
mlocManager.removeUpdates(this);
Intent intent = new Intent();
intent.putExtra("Latitude", passLatLng.latitude);
intent.putExtra("Longitude", passLatLng.longitude);
getActivity().setResult(Activity.RESULT_OK, intent);
getActivity().finish();
}
现在,我希望我的结果在MainActivity
课程中。所以,我在onActivityResult
方法中编写了以下代码:
if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_CODE_MAP)
{
tost("2");
double lat=data.getExtras().getDouble("Latitude");
double lng=data.getExtras().getDouble("Longitude");
tost(lat + " -- " + lng);
}
问题:返回的resultCode
不是Activity.RESULT_OK
而我获得的Intent
是null
。
怎么办?感谢
答案 0 :(得分:10)
getActivity().setResult(Activity.RESULT_OK, intent);
getActivity().finish();
此代码不应该在onDestroy中。 onDestroy在活动完成后发生,并且调用了onActivityResult。
此代码需要在关闭活动/片段的代码中, 比如按下后退按键,或点击按钮
答案 1 :(得分:5)
也许您需要澄清两种活动的启动模式。通常他们应该是"标准",如果有" singleTop" ...活动清单文件中的...属性。你需要多加注意。
答案 2 :(得分:3)
试试这个:
Intent data = new Intent();
intent.putExtra("Latitude", passLatLng.latitude);
intent.putExtra("Longitude", passLatLng.longitude);
if (getParent() == null) {
setResult(Activity.RESULT_OK, data);
} else {
getParent().setResult(Activity.RESULT_OK, data);
}
getActivity().finish();
答案 3 :(得分:0)
对于我来说,删除标记Intent.FLAG_ACTIVITY_NEW_TASK
的意图已经解决了问题
答案 4 :(得分:-1)
finish()方法在setResult()之前调用
尝试像这样覆盖onBackPressed()方法
override fun onBackPressed() {
setResult(RESULT_OK)
super.onBackPressed()
}