2016-05-12 104 views
2

我試圖讓用戶長時間點擊地圖,而不是創建一個標記,新的活動應該打開。它應該包含經度和緯度,即用戶點擊的位置。將lat lng傳遞給Android中的另一個活動

我知道數據傳輸很容易,當我使用對話框,但我不想在我的應用程序的這部分使用對話框片段。

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)); 
} 

我的問題是這樣的 - 當我啓動應用程序,然後單擊地圖上,新開的活動顯示緯度和經度爲0.0無關於地圖上我點擊的地方。

+1

這意味着你的'if(myLocation!= null){'沒有被調用。調試並在這裏檢查。 –

回答

5

正如在這裏看到LatLng

public final class LatLng extends Object implements 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

好點! +1 – antonio

+2

@Kemo:沒關係。我剛剛發佈了這個答案,以顯示組件之間'LatLng'對象的其他簡單方法。謝謝 –

4

您傳遞的數據爲String,但將其檢索爲double

變化

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

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

謝謝您的回覆Antonio,我現在遇到了以下問題 - lat/lng顯示用戶的當前位置,而不是我點擊的地圖上的位置。我上面更新了我的代碼。 – Kemo

+1

是'myLocation!= null'? – antonio

+0

當設備未啓用GPS時,使用myLocation!= null。如果我啓用了GPS位置,它會顯示我當前的位置,而不是我點擊的地圖上的位置。 – Kemo

1

你應該寫你的Intent同時傳遞數據,因爲這。

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

這意味着你的'if(myLocation!= null){'沒有被調用。調試並在這裏檢查。 –

1

更改讀取的代碼在接收活動到此:

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

或者通過附加在首位雙打:-)

1

試試這個,

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

然後得到這樣,

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

感謝。

相關問題