Android 如何获取标记文本的单击事件
我正在我的应用程序中显示谷歌地图api v2。我在地图上设置了一些标记。 我还对单击标记时显示的标记设置了标题和代码段 现在我想在单击标记的标题而不是标记本身时调用一个新活动Android 如何获取标记文本的单击事件,android,google-maps,android-maps-v2,Android,Google Maps,Android Maps V2,我正在我的应用程序中显示谷歌地图api v2。我在地图上设置了一些标记。 我还对单击标记时显示的标记设置了标题和代码段 现在我想在单击标记的标题而不是标记本身时调用一个新活动 map.setOnMarkerClickListner 仅在单击标记时调用 但是我不想那样做。我希望标记在单击标记时显示标题和代码段,但我希望在单击标题时调用新活动 知道我们怎么做吗 谢谢要实现这一点,您需要在getInfoContents方法中实现setOnInfoWindowClickListener,这样单击inf
map.setOnMarkerClickListner
仅在单击标记时调用
但是我不想那样做。我希望标记在单击标记时显示标题和代码段,但我希望在单击标题时调用新活动
知道我们怎么做吗
谢谢要实现这一点,您需要在
getInfoContents
方法中实现setOnInfoWindowClickListener
,这样单击infoContents
窗口将唤醒listener以执行您想要的操作,您可以这样做:
map.setInfoWindowAdapter(new InfoWindowAdapter() {
// Use default InfoWindow frame
@Override
public View getInfoWindow(Marker args) {
return null;
}
// Defines the contents of the InfoWindow
@Override
public View getInfoContents(Marker args) {
// Getting view from the layout file info_window_layout
View v = getLayoutInflater().inflate(R.layout.info_window_layout, null);
// Getting the position from the marker
clickMarkerLatLng = args.getPosition();
TextView title = (TextView) v.findViewById(R.id.tvTitle);
title.setText(args.getTitle());
map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
public void onInfoWindowClick(Marker marker)
{
if (SGTasksListAppObj.getInstance().currentUserLocation!=null)
{
if (String.valueOf(SGTasksListAppObj.getInstance().currentUserLocation.getLatitude()).substring(0, 8).contains(String.valueOf(clickMarkerLatLng.latitude).substring(0, 8)) &&
String.valueOf(SGTasksListAppObj.getInstance().currentUserLocation.getLongitude()).substring(0, 8).contains(String.valueOf(clickMarkerLatLng.longitude).substring(0, 8)))
{
Toast.makeText(getApplicationContext(), "This your current location, navigation is not needed.", Toast.LENGTH_SHORT).show();
}
else
{
FlurryAgent.onEvent("Start navigation window was clicked from daily map");
tasksRepository = SGTasksListAppObj.getInstance().tasksRepository.getTasksRepository();
for (Task tmptask : tasksRepository)
{
String tempTaskLat = String.valueOf(tmptask.getLatitude());
String tempTaskLng = String.valueOf(tmptask.getLongtitude());
Log.d(TAG, String.valueOf(tmptask.getLatitude())+","+String.valueOf(clickMarkerLatLng.latitude).substring(0, 8));
if (tempTaskLat.contains(String.valueOf(clickMarkerLatLng.latitude).substring(0, 8)) && tempTaskLng.contains(String.valueOf(clickMarkerLatLng.longitude).substring(0, 8)))
{
task = tmptask;
break;
}
}
Intent intent = new Intent(getApplicationContext() ,RoadDirectionsActivity.class);
intent.putExtra(TasksListActivity.KEY_ID, task.getId());
startActivity(intent);
}
}
else
{
Toast.makeText(getApplicationContext(), "Your current location could not be found,\nNavigation is not possible.", Toast.LENGTH_SHORT).show();
}
}
});
// Returning the view containing InfoWindow contents
return v;
}
});
要在标记上设置标题,请执行以下操作:
marker.showInfoWindow();
要在标题上设置单击侦听器,请执行以下操作:
googleMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker arg0) {
// TODO Auto-generated method stub
}
});
该方法在第二个代码段中的位置可能存在重复?我只是把它放在活动类中,它一直告诉我“无法解析符号”SetOnInfo WindowClickListener“嗨@PatMyron,我不确定,你为什么会得到这个。你导入了侦听器吗?你的代码具体放在哪里?你需要导入监听器。Heloo emil Adz,hw cn我通过点击该标记将标记的详细信息转移到新活动中请任何人都可以帮助我that@NikhilSingh,这与眼前的问题无关,但要做到这一点,您可以将此数据添加到您为打开下一个活动而创建的意图包中,从而将其传递到下一个活动。@EmilAdz感谢fr ur response先生,我如何才能仅获取它所在的标记的信息clicked@NikhilSingh,我不理解你的问题,你完全按照答案中的说明来做。请问一个新的更清楚的问题,我会尽力帮助你。@ThinkTwiceCode一次,你做不到。
/**
* 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");
}
}
});
}
GoogleMap mGoogleMap;
mGoogleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker arg0) {
Intent intent = new Intent(getBaseContext(), Activity.class);
String reference = mMarkerPlaceLink.get(arg0.getId());
intent.putExtra("reference", reference);
// Starting the Activity
startActivity(intent);
Log.d("mGoogleMap1", "Activity_Calling");
}
});