0

ユーザーの現在地に基づいて最も近い場所を表示する Android GPS アプリケーションを構築しています。私は MapFragment を使用しており、AsyncTask 内で次のようにマップにマーカーを配置しています。

protected void onPostExecute(Void result) { 
    super.onPostExecute(result);

    for(int i = 0; i < list.size(); i++)
    {
        HashMap<String,String> location = new HashMap<String,String>();
        location = list.get(i);

        String type = location.get("type");
        int marker = getTypeDrawable(type);

        LatLng position = new LatLng(Float.parseFloat(location.get("lat")), Float.parseFloat(location.get("long")));
         map.addMarker(new MarkerOptions()
        .position(position)
        .title(location.get("name"))
        .snippet(location.get("distance") + location.get("type"))                                  
        .icon(BitmapDescriptorFactory.fromResource(marker)));
        System.out.println(list.get(i));
    }

    Toast.makeText(MainActivity.this, "Finished retrieving nearby locations",
            Toast.LENGTH_SHORT).show();         
}

これは、最も近い場所のすべての情報を含むグローバル変数リストです。ArrayList<HashMap<String, String>> list;

私の計画は、ジオキャッシング アプリケーション 'C:Geo' のように、マーカーをクリックするとポップアップ ダイアログを表示することです。私の問題は、ダイアログ内にそのマーカーの情報を表示する方法がわからないことです。ご覧のとおり、メソッドを使用していますが、map.addMarker()その場所をそのマーカーに関連付ける方法がありません。

次のようなポップアップ ダイアログを作成したいと思います。

@Override
public boolean onMarkerClick(Marker marker) {
 //Get location associated with marker. 
//Fill popup dialog with information associated 
//with location and then invoke the dialog.
}
4

2 に答える 2

1

マーカーと場所を一意に識別するものを選択する必要があります。おそらく、それはマーカーに設定したタイトル (場所に対応する文字列があるでしょう) または緯度/経度の組み合わせです。ユーザーがマーカーをタップすると、onMarkerClick(Marker marker)メソッドでそのマーカーを受け取り、マーカーからタイトルまたは緯度/経度を読み取り、場所から対応する場所を検索します。たとえば、場所の HashMap を繰り返し処理し、その場所の緯度/経度がマーカーと同じかどうかを確認すると、マーカーに対応する場所が得られます。

確かにもっと効率的な方法がありますが、アイデアはわかります。

于 2013-03-13T15:50:27.623 に答える