2016-05-12 8 views
2

ユーザーがマップを長時間クリックするのを可能にしようとしています。マーカーを作成する代わりに、新しいアクティビティが開きます。緯度と経度、つまりユーザーがクリックした場所が含まれている必要があります。Androidの別のアクティビティにlatlを渡す

私はダイアログを使用するとデータ転送は簡単だと知っていますが、私のアプリケーションのこの部分ではダイアログの断片を使いたくありません。

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なしとして緯度とLNGを表示どこで地図上でクリックしたのか

+1

これは、あなたの 'if(myLocation!= null){'が呼び出されないことを意味します。ここでデバッグして確認してください。 –

答えて

5

最初の場所でダブルスとしてエクストラを渡す:

public final class LatLng extends Object implementsパーセル可能

手段LatlngクラスはParcelableインターフェイスを実装しているので、我々はそれがdirecltyようIntent.putExtraを使用して渡すことができます。

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

などgetExtras().getParcelableを使用して次の活動にそれを得る:今すぐobjLatLngを使用

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

TextViewの位置座標を表示します。

+1

大きなポイント! +1 – antonio

+2

@Kemo:これは大丈夫です。私はコンポーネント間で 'LatLng'オブジェクトを共有する他の簡単な方法を示すためにこの回答を投稿しました。ありがとう –

4

データをStringとして渡していますが、それをdoubleとして取得しています。

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

あなたのお返事ありがとうございましたAntonio、私は今、以下の問題があります。 - lat/lngは、クリックした地図の場所ではなく、ユーザーの現在の場所を表示します。上記のコードを更新しました。 – Kemo

+1

'myLocation!= null'ですか? – antonio

+0

myLocation!= nullは、デバイスがGPSを有効にしていない場合に使用されます。自分のGPS位置を有効にすると、クリックした地図上の場所ではなく、現在地が表示されます。 – Kemo

1

ための変更

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

あなたはこのようご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")); 

または、こちらをご覧LatLngとして:-)

1

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

おかげで、のように取得、その後

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

、これを試してみてください。

関連する問題