Android:设置结果不起作用

snz8szmq  于 2023-03-11  发布在  Android
关注(0)|答案(6)|浏览(224)

场景:我有一个MainActivity.javaOtherPageForFragments.java和一个位于OtherPageForFragments.java上的片段
MainActivity.java中,我编写了以下代码来启动一个活动并在
onActivityResult(请求代码整数,结果代码整数,意图数据整数)

startActivityForResult(new Intent(this, OtherPageForFragments.class),REQUEST_CODE_MAP);

在fragment类的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,而我得到的Intentnull
怎么办?谢谢

ujv3wf0j

ujv3wf0j1#

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

此代码不应位于onDestroy中。onDestroy发生在活动已完成且调用了onActivityResult之后。
此代码需要位于关闭活动/片段的代码中,如按下返回键或单击关闭按钮

ttcibm8c

ttcibm8c2#

试试这个:

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();
5gfr0r5j

5gfr0r5j3#

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

tvokkenx

tvokkenx4#

对于我来说,删除lauch意图的标记Intent.FLAG_ACTIVITY_NEW_TASK解决了问题

az31mfrm

az31mfrm5#

在setResult()之前调用方法finish()
尝试如下覆盖onBackPressed()方法

override fun onBackPressed() {
    setResult(RESULT_OK)
    super.onBackPressed()
}
jhdbpxl9

jhdbpxl96#

以上都试过了。

什么都不管用

这是个愚蠢错误。
我正在调用finish()在回收器适配器(在项目单击).

并且在setResult(CODE,intent)之前被调用;

如果以上所有都失败,

注解“finish();“并检查是否“finish();“正在其他地方调用;

相关问题