#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 в представлении списка?