将lat lng传递给Android中的另一个活动

时间:2016-05-12 09:45:39

标签: android google-maps android-activity

我正在尝试让用户长按地图,而不是创建标记,新活动应该打开。它应包含纬度和经度,即用户点击的位置。

我知道使用对话框时数据传输很容易,但我不想在我的应用程序的这一部分使用对话框片段。

MapActivity:

//Add marker on long click
final double finalLongitude = longitude;
final double finalLatitude = latitude;

mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
    // start SendMessageActivity need to add marker to message activity
    Intent intent = new Intent(getActivity(), DisplayLocationActivity.class);
    intent.putExtra("latitude",""+ finalLatitude);
    intent.putExtra("longitude", "" + finalLongitude);
    startActivity(intent);
}

DisplayLocationActivity:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_set_location);

    Bundle bundle = getIntent().getExtras();
    double lat = bundle.getDouble("latitude");
    double lng = bundle.getDouble("longitude");

    //display lat lng
    mLatDisplay = (TextView) findViewById(R.id.latTextViewDisplay);
    mLangDisplay = (TextView) findViewById(R.id.lngTextViewDisplay);

    mLatDisplay.setText(String.valueOf(lat));
    mLangDisplay.setText(String.valueOf(lng));
}

我的问题是这样的 - 当我启动应用程序并点击地图时,无论我点击地图的哪个位置,新打开的活动都会将lat和lng显示为0.0。

6 个答案:

答案 0 :(得分:7)

如此处LatLng

  

public final class LatLng extends Object实现Parcelable

表示Latlng类实现了Parcelable接口,因此我们可以使用Intent.putExtra传递它直接使用:

@Override
public void onMapLongClick(LatLng arg) {
  intent.putExtra("Latlng", arg);
  ..
}

并使用getExtras().getParcelable在下一个活动中获取它,如:

LatLng objLatLng=getIntent().getExtras().getParcelable("Latlng");

现在使用objLatLng在TextView中显示位置坐标。

答案 1 :(得分:4)

您将数据作为String传递,但将其检索为double

更改

intent.putExtra("latitude",""+ finalLatitude);
intent.putExtra("longitude", "" + finalLongitude);

代表

intent.putExtra("latitude", finalLatitude);
intent.putExtra("longitude", finalLongitude);

答案 2 :(得分:2)

就我而言,我这样做。 sendinf intent的第一个活动......

LatLng center = mMap.getCameraPosition().target;
intent.putExtra("Latlng", center);

第二项活动。

Intent intent;
LatLng latlong =intent.getIntent().getExtras().getParcelable("Latlng");

现在您可以从latlong Object获取纬度和经度

latlong.getlatitude;
latlong.getlongitude

答案 3 :(得分:1)

您应该在传递数据时写下Intent

  intent.putExtra("latitude", finalLatitude);
  intent.putExtra("longitude", finalLongitude);

答案 4 :(得分:1)

将接收活动中的读取代码更改为:

Bundle bundle = getIntent().getExtras();
double lat = Double.valueOf(bundle.getString("latitude"));
double lng = Double.valueOf(bundle.getString("longitude"));

或者首先将Extras作为双打传递: - )

答案 5 :(得分:1)

试试这个,

intent.putExtra("lat","" finalLatitude);
intent.putExtra("lng", ""  finalLongitude);

然后就好了,

double lat = Double.valueOf(bundle.getString("lat"));
double lng = Double.valueOf(bundle.getString("lng"));

感谢。