Android Google Map - Щелчок маркера открывает новую активность или большее окно
Я искал помощь по внедрению OnMarkerClickListener, но ничего, что я нашел, не сработало. Это мой маркер ниже, и при нажатии на него меняется только цвет (голубой). Я ищу его, чтобы открыть большее окно, чтобы я мог добавить дополнительную информацию. Возможно ли это?
googlemap.addMarker(new MarkerOptions()
.position(new LatLng(49.378,-0.3904))
.title("Hello World")
.snippet("This is my test app")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)));
Маркер отлично работает на моей карте, но теперь я хотел бы нажать маркер и открыть его для новой активности/страницы или большего окна, с чем легче работать. Поскольку я являюсь настоящим новичком в создании приложений, если кто-то успешно получил рабочий пример, можете ли вы установить ссылку или какой-то код.
Спасибо заранее!
Edit:
Из предложенного учебника я изменил часть MainActivity.java.
Я добавил в OnMarkerClickListener и решил добавить нереализованные методы в открытый класс
public class MainActivity extends Activity implements LocationListener, OnMarkerClickListener {
Под частным void setUpMap() Я добавил в свой код: private Marker myMarker, слушатель setonMarkerclick и myMarker =,:
private Marker myMarker;
{
googlemap.setOnMarkerClickListener(this);
myMarker = googlemap.addMarker(new MarkerOptions()
.position(new LatLng(LatLng))
.title("Hello World")
.snippet("My First App")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)));
}
В невыполненном методе внизу я:
@Override
public boolean onMarkerClick(Marker arg0) {
// TODO Auto-generated method stub
return false;
Что мне нужно изменить в публичной части Boolean OnMarkerClick?
Я не получаю никаких ошибок, но просто не работает. Что еще мне нужно добавить или изменить?
Любая помощь приветствуется!
Ответы
Ответ 1
События кликов маркера
Не привязывайтесь к маркеру после клика на Android-карте v2
Цитата из вышеприведенного сообщения
Вы можете использовать OnMarkerClickListener
для прослушивания событий щелчка на маркере. Чтобы установить этот прослушиватель на карте, вызовите GoogleMap.setOnMarkerClickListener(OnMarkerClickListener). Когда пользователь нажимает на маркер, будет вызываться onMarkerClick (Marker), и маркер будет передан в качестве аргумента. Этот метод возвращает логическое значение, указывающее, использовало ли вы событие (т.е. Вы хотите подавить поведение по умолчанию). Если он вернет значение false, в дополнение к вашему пользовательскому поведению произойдет поведение по умолчанию. Поведение по умолчанию для события щелчка маркера - показать его информационное окно (если доступно) и переместить камеру таким образом, чтобы маркер находился на карте.
https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/GoogleMap.OnMarkerClickListener.
Используйте OnMarkerClickListener на своем маркере.
Проверьте ссылку на фрагменты кода
API Карт Google v2: как сделать маркеры доступными для кликов?
Пример: Работает на моем телефоне
Marker source,destination;
GoogleMap mMap;
mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
.getMap();
source = mMap.addMarker(new MarkerOptions()
.position(sc)
.title("MyHome")
.snippet("Bangalore")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.pin)));
destination= mMap.addMarker(new MarkerOptions()
.position(lng)
.title("MapleBear Head Office")
.snippet("Jayanager")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.pin)));
mMap.setOnMarkerClickListener(new OnMarkerClickListener()
{
@Override
public boolean onMarkerClick(Marker arg0) {
if(arg0.getTitle().equals("MyHome")) // if marker source is clicked
Toast.makeText(MainActivity.this, arg0.getTitle(), Toast.LENGTH_SHORT).show();// display toast
return true;
}
});
Ответ 2
Этот код обрабатывает событие щелчка производителя и загружает новый макет (XML) с некоторой информацией:
/**
* adding individual markers, displaying text on on marker click on a
* bubble, action of on marker bubble click
*/
private final void addLocationsToMap() {
int i = 0;
for (Stores store : storeList) {
LatLng l = new LatLng(store.getLatitude(), store.getLongtitude());
MarkerOptions marker = new MarkerOptions()
.position(l)
.title(store.getStoreName())
.snippet("" + i)
.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
googleMap.addMarker(marker);
++i;
}
googleMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
try {
popUpWindow.setVisibility(View.VISIBLE);
Stores store = storeList.get(Integer.parseInt(marker
.getSnippet()));
// set details
email.setText(store.getEmail());
phoneNo.setText(store.getPhone());
address.setText(store.getAddress());
// setting test value to phone number
tempString = store.getPhone();
SpannableString spanString = new SpannableString(tempString);
spanString.setSpan(new UnderlineSpan(), 0,
spanString.length(), 0);
phoneNo.setText(spanString);
// setting test value to email
tempStringemail = store.getEmail();
SpannableString spanString1 = new SpannableString(tempStringemail);
spanString1.setSpan(new UnderlineSpan(), 0, spanString1.length(), 0);
email.setText(spanString1);
storeLat = store.getLatitude();
storelng = store.getLongtitude();
} catch (ArrayIndexOutOfBoundsException e) {
Log.e("ArrayIndexOutOfBoundsException", " Occured");
}
}
});
}
Ответ 3
Если вам нужно событие Нажмите на рынке, этот код это решение.
private GoogleMap mGoogleMap;
mGoogleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener()
{
@Override
public boolean onMarkerClick(Marker arg0) {
if(arg0 != null && arg0.getTitle().equals(markerOptions2.getTitle().toString())); // if marker source is clicked
Toast.makeText(menu.this, arg0.getTitle(), Toast.LENGTH_SHORT).show();// display toast
return true;
}
});
Удача