【问题标题】:Passing lat lng to another activity in Android将 lat lng 传递给 Android 中的另一个活动
【发布时间】:2016-05-12 09:45:38
【问题描述】:

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

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

地图活动:

//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。

【问题讨论】:

  • 这意味着您的if (myLocation != null) { 没有被调用。在这里调试和检查。

标签: android google-maps android-activity


【解决方案1】:

见这里LatLng:

public final class LatLng 扩展 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 中显示位置坐标。

【讨论】:

  • @Kemo:没关系。我刚刚发布了这个答案,以展示在组件之间共享 LatLng 对象的其他简单方法。谢谢
【解决方案2】:

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

改变

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

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

【讨论】:

  • 感谢您的回复 Antonio,我现在遇到以下问题 - lat/lng 显示的是用户的当前位置,而不是我点击的地图上的位置。我更新了上面的代码。
  • myLocation != null?
  • myLocation != null 在设备未启用 GPS 时使用。如果我启用 GPS 位置,它会显示我当前的位置,而不是我点击的地图上的位置。
  • 虽然此答案解决了您的问题并最大限度地减少了代码更改以使其正常工作,但@ρяσѕρєя K 的答案更好,必须是公认的答案
【解决方案3】:

就我而言,我正在这样做。 sendinf 意图的第一个活动...

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

第二个活动。

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

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

latlong.getlatitude;
latlong.getlongitude

【讨论】:

    【解决方案4】:

    您应该在传递数据时写上您的Intent

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

    【讨论】:

    • 这意味着您的if (myLocation != null) { 没有被调用。在这里调试和检查。
    【解决方案5】:

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

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

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

    【讨论】:

      【解决方案6】:

      试试这个,

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

      然后喜欢,

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

      谢谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-13
        • 1970-01-01
        • 1970-01-01
        • 2017-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多