Наряду с заголовком и фрагментом, как добавить дополнительные данные в маркер?

Проблема: мой удаленный сервер возвращает 10-кратное значение для запроса. Я проанализировал свой ответ и, используя цикл for, добавил маркеры (здесь я добавил информацию в заголовок и фрагмент) на карту (здесь я хочу добавить дополнительные данные к маркеру, чтобы я могу получить к нему доступ в событии щелчка информационного окна)

в infoWindowClickListener я хочу получить доступ к этим дополнительным данным.

Как добавить дополнительные данные в маркер/как получить доступ к данным ph для определенного клика маркера (иначе я получу последнее значение ph во всех маркерах).

я пробовал так.

   private class HttpGetTask extends AsyncTask<Void, Void, String> 
    {
    //URL and http stuff
    }

            @Override
            protected void onPostExecute(String result) {

                try {
                     json = new JSONArray(result);

                    for (int i = 0; i < json.length(); i++) {
                        Log.v("Response", result);
                        final JSONObject e = json.getJSONObject(i);
                        String point = e.getString("point");

                        Log.v("POINT", point);//Checking points

                        String phone1 = e.getString("ph");
                        Log.v("PH", phone1);//Checking phone numbers

                        String[] point2 = point.split(",");//Splitting points
                        double lat1 = Double.parseDouble(point2[0]);
                        double lng1 = Double.parseDouble(point2[1]);
                        Log.v("LLDN", "" + lat1 + "&" + lng1);

                        //Adding multiple markers
//can i add extra information here along with title and snippet
                        gMap.addMarker(new MarkerOptions()
                                .title(e.getString("name"))
                                .snippet(
                                        e.getString("LS")+""+e.getString("ph") )
                                .position(new LatLng(lng1, lat1))
                                .icon(BitmapDescriptorFactory
                                        .fromResource(R.drawable.pmr)));

                    }
                } catch (JSONException e)
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

можно ли придать дополнительное значение маркеру вместе с заголовком и фрагментом.? или я неправильно анализирую?


person Aparichith    schedule 23.04.2014    source источник


Ответы (2)


Не лучшее решение, но это то, что я делаю в своем приложении.

создайте markersMap как личное поле в вашей деятельности/фрагменте.

private Map<Marker, ExtraDataObj> markersMap = new HashMap<Marker, ExtraDataObj>();

Когда вы создаете маркер, также поместите маркер и дополнительные данные в свою карту markersMap.

ExtraDataObj extraDataObj = new ExtraDataObj();
// extract and store all data you want in the extraDataObj
....
...
..
Marker marker = gMap.addMarker(new MarkerOptions()
                        .title(e.getString("name"))
                        .snippet(
                                e.getString("LS")+""+e.getString("ph") )
                        .position(new LatLng(lng1, lat1))
                        .icon(BitmapDescriptorFactory
                                .fromResource(R.drawable.pmr)));
markersMap.put(marker, extraDataObj);

в вашем onInfoWindowClick получите дополнительные данные из markersMap

ExtraDataObj extraDataObj = markersMap.get(arg0) 
person worawee.s    schedule 23.04.2014
comment
Это нормально, я также сослался на блог, где он объяснил это так. Но можем ли мы добавить дополнительные пользовательские данные в маркер? так что я могу использовать его в будущем.? - person Aparichith; 23.04.2014
comment
Из справочника по классу маркеров google map v2 (developer. android.com/reference/com/google/android/gms/maps/), я не думаю, что в данный момент там есть то, что вам нужно. - person worawee.s; 24.04.2014

Хотя @worawee.s будет работать отлично, есть более элегантное решение, позволяющее добавлять дополнительную информацию к объекту Marker. Поэтому, чтобы решить эту проблему, вы можете использовать setTag (тег объекта):

Вы можете использовать это свойство, чтобы связать произвольный объект с этим маркером. Например, Объект может содержать данные о том, что представляет маркер. Это проще, чем хранить отдельную карту. В качестве другого примера вы можете связать идентификатор строки, соответствующий идентификатору из набора данных.

person Alex Mamo    schedule 03.04.2019