我正在编写一个组件,允许用户根据位置选择器指示的位置来选择位置。其中一个要求是将 LatLng 对象从映射活动发送回调用前者的活动。问题是返回的结果代码总是RESULT_CANCELLED
的,尽管它显式设置为RESULT_OK
。代码如下: 呼叫活动:
public void getLocationBtn(View view) {
Intent i = new Intent(this, PickLocationActivity.class);
startActivityForResult(i, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if (resultCode == Activity.RESULT_OK) {
location = data.getParcelableExtra("location");
Log.d(TAG, "gotLocation: " + location);
}
if (resultCode == Activity.RESULT_CANCELED) {
Toast.makeText(getApplicationContext(), "Location not chosen", Toast.LENGTH_SHORT).show();
}
}
}
调用的活动:
btnFind.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
centerLatLang = mMap.getProjection().getVisibleRegion().latLngBounds.getCenter();
Button doneBtn = findViewById(R.id.locationPickerDoneBtn);
doneBtn.setEnabled(true);
}
});
}
public void doneBtn(View view) {
Intent returnIntent = new Intent();
returnIntent.putExtra("location", centerLatLang);
setResult(Activity.RESULT_OK, returnIntent);
finish();
}
btnFind 获取坐标,doneBtn 确认用户的选择并返回到上一个活动。 我已经尝试用getIntent()
替换Intent returnIntent = new Intent();
,但它不起作用;返回的捆绑包为空。
当您的活动使用单任务启动模式时,就会发生这种情况。 因此,如果您的清单活动选项卡中有以下行,请将其删除,我重新命令。
android:launchMode="singleInstance"