Android:setResult无法正常工作

时间:2013-07-03 09:32:48

标签: java android android-intent

情景:我有一个MainActivity.javaOtherPageForFragments.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而我获得的Intentnull

怎么办?感谢

5 个答案:

答案 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()
}