10

场景:我有一个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_OKIntent我得到的是null

该怎么办?谢谢

4

5 回答 5

14
getActivity().setResult(Activity.RESULT_OK, intent);
getActivity().finish();

这段代码不应该在 onDestroy 中。onDestroy 发生在活动已经完成并调用 onActivityResult 之后。

此代码需要在关闭活动/片段的代码中,例如按下后退键或关闭按钮 onClick

于 2013-07-03T09:50:32.240 回答
4

尝试这个:

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();
于 2013-07-03T09:36:29.460 回答
4

也许您需要澄清这两个活动的启动模式。如果您的活动清单文件中有“singleTop”...属性,通常它们应该是“标准的”。你需要多加注意。

于 2014-10-24T15:52:59.687 回答
3

对我来说,删除Intent.FLAG_ACTIVITY_NEW_TASKlauch 意图的标志解决了这个问题

于 2018-07-25T11:31:33.350 回答
-1

在 setResult() 之前调用方法 finish()

尝试像这样覆盖 onBackPressed() 方法

override fun onBackPressed() {
    setResult(RESULT_OK)
    super.onBackPressed()
}
于 2020-10-28T16:34:13.107 回答