MapQuest (Android SDK): поместите pin-код на карту и автоматически откройте окно

#android #maps #mapbox #infowindow #mapquest

#Android #Карты #mapbox #infowindow #mapquest

Вопрос:

Я использую MapQuest Android SDK в своем приложении. У меня есть сценарий, в котором я помещаю pin-код на карту, и я хочу автоматически открыть окно для pin-кода.

Я использую MapboxMap.InfoWindowAdapter и метод getInfoWindow(Marker marker) . Мой вопрос здесь, как автоматически открыть окно, как только я сброшу pin-код.

введите описание изображения здесь

Я хочу автоматически открывать окно после сброса pin-кода?

Вот мой код:

      @Override
        public void onResume() {
            super.onResume();
    //This is where I pass my poi from poiSearchListview Fragment to my Map Fragment through Activity. So On onResume() if will call this method.
            if (null != getActivity.getPoiFields()) {
                fromSearchFrag = true;
                addPoiMarker(getActivity.getPoiFields());
         }
        }
  

Это мой метод onCreateView ():

  @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.map, container, false);

 mMapView.getMapAsync(new OnMapReadyCallback() {

mPoiFields.clear();
if (null != getActivity.getPoiFields()) {
                    fromSearch = true;
                    addPoiMarker(getActivity.getPoiFields());
}

 mMapboxMap.setInfoWindowAdapter(new MapboxMap.InfoWindowAdapter() {
       @Nullable
                    @Override
                    public View getInfoWindow(@NonNull Marker marker) {

                        View customView = null;
**//Here I have my own window my own images, texts and buttons.**

                        return custom view;
                      }
            });
    }
  

});

Это мой метод добавления POIMarker на карту в onResume ()

         public void addPoiMarker(Fields poiFields) {
            final String name = poiFields.getName();
            poiAddress = poiFields.getAddress()   ", "   poiFields.getCity()   ", "   poiFields.getState();

            Drawable iconDrawable = ContextCompat.getDrawable(getActivity(), R.drawable.pointofinterest);
            Icon icon = IconFactory.getInstance(getActivity()).fromDrawable(iconDrawable);
            if (mMapboxMap != null) {

                mMapboxMap.removeAnnotations(); // TO remove all the markers before dropping the Address marker from search.

                markerOptions = new MarkerOptions().icon(icon).position(
                        new LatLng(poiFields.getLat(), poiFields.getLng())).title(name);

                mSearchResultMarker = mMapboxMap.addMarker(markerOptions);
                mPoiFields.put(mSearchResultMarker, poiFields);



             //  mMapboxMap.selectMarker(mSearchResultMarker);
        // **IF I use selectMarker it shows just the address on the window and
 not my custom window. 
I want to show my custom info window here as selectMarker doesn't clear my issue, what to do ?**.
                }
                zoomToPin(poiFields.getLat(), poiFields.getLng());
            }
  

Ответ №1:

Попробуйте использовать mapboxMap.selectMarker() передачу маркера, который вы хотите выбрать.

РЕДАКТИРОВАТЬ: я изменил пример демонстрационного приложения CustomInfoWindowActivity , чтобы создать оба сценария, которые вы упомянули в своем комментарии ниже. Я имитирую сценарий 1, просто щелкнув карту (не анимируя удаление маркера), это вызывает mapboxMap.selectMarker() и отображает окно пользовательской информации, как и ожидалось. Сценарий 2 также работает должным образом при нажатии на значок маркера.

введите описание изображения здесь

если я все еще не понимаю проблему, пожалуйста, предоставьте дополнительный код и изображения / видео / gif-файлы проблемы.

Комментарии:

1. Потрясающе.. В любом случае я могу открыть пользовательское окно, которое у меня есть самостоятельно. Напишите сейчас, используя mapboxMap.selectMarker() , я могу открыть собственное окно.

2. Под пользовательским окном, я полагаю, вы имеете в виду информационное окно? Он должен работать так же, как и информационное окно по умолчанию. Если нет, дайте мне знать, и я смогу разобраться в этом подробнее.

3. Извините, я продолжаю нажимать enter. Когда я сбрасываю pin-код и когда я нажимаю на pin-код.. Я использую пользовательский макет для своего окна и показываю его следующим образом: — mMapboxMap.setInfoWindowAdapter(new MapboxMap.InfoWindowAdapter() { @Override public View getInfoWindow( Marker marker) { **Here I'm inflating my custom View**} Так же, как я хочу раздувать свое пользовательское окно, когда я сбрасываю pin-код. Используя mapboxMap.selectMarker() и добавив маркер, я показываю окно (собственное) с именем. Могу ли я показать пользовательское окно с уже имеющимся у меня подобным образом, как я это делаю, когда нажимаю на пин-код?

4. Я не уверен, что понимаю ваш вопрос, но вы можете сначала убедиться, что установили InfoWindowAdapter, а затем выберите маркер. Похоже, вы делаете это в неправильном порядке.

5. Хорошо, позвольте мне объяснить вам еще раз. ПРИМЕЧАНИЕ : — У меня есть собственное информационное окно со ЗНАЧКАМИ , КНОПКАМИ и ** адресом из POI **. У меня есть два сценария 1. Я сбрасываю pin-код из poi search> Он должен сбросить pin-код и показать мое пользовательское информационное окно. 2. Когда я нахожусь на карте и у меня есть пин-код на ней. Пользователь может нажать на него, чтобы увидеть окно, и нажать в любом месте карты, чтобы оно исчезло. Я могу выполнить 2-й сценарий, где в getInfoWindow (Marker marker). Но в 1-м сценарии, где я отбрасываю пин-код, и он должен автоматически отображать мое пользовательское окно при его отбрасывании. selectMarker() открывает собственное окно

Ответ №2:

Вы пробовали вызывать showInfoWindow() метод на Marker ?

Комментарии:

1. У меня есть два фрагмента: один — фрагмент карты, а другой — список с местами. Когда я выбираю элемент в виде списка, pin-код будет удален на карте. когда я нажимаю pin-код на карте, я вызываю » showInfoWindow ()». Но моя проблема в том, чтобы открыть информационное окно, как только я удалю pin-код из onItemClick в представлении списка?