我有一个代码,当你点击infowindow时,让一个标记启动一个活动。它工作得非常好。但是当我尝试添加另一个标记和另一个@override时,它总是在所有Markers infowindows上打开最后一个类。因此,实质上所有标记infowindows在单击时打开相同的活动,而不是打开我打算使用的单独类。
以下代码在InfoWindowClicked上成功打开了1个活动。我称之为example.class,这适用于需要此示例的每个人。
public class MainActivity extends Activity implements OnInfoWindowClickListener {
private GoogleMap googlemap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(isGooglePlay()){
setContentView(R.layout.activity_main);
setUpMap();
{ } }
googlemap.addMarker(new MarkerOptions()
.position(new LatLng(0,-0))
.title("Title")
.snippet("Snippet")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.star)));
googlemap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
Intent intent = new Intent(MainActivity.this,Example.class);
startActivity(intent);
} });
{
所以 GoogleMap googlemap / mMap (或任何你称之为你的)和 @override void Oncreate (我的应用程序仅在GooglePlayServices可用时启动,你的应用程序可能不是像这样)你可以把标记和infowindowclick代码。
确保代码中的某处还有(通常在私有的空集setUpMap(){)
googlemap = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
现在下面是带有两个标记的代码,但是当它们被单击时它们都会打开example2.class。有人可以帮我解决这个问题,这样我就可以将它们分开并让它们打开不同的类吗?
googlemap.addMarker(new MarkerOptions()
.position(new LatLng(0,-0))
.title("Title")
.snippet("Snippet")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.star)));
googlemap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
Intent intent = new Intent(MainActivity.this,Example.class);
startActivity(intent);
} });
{
{
googlemap.addMarker(new MarkerOptions()
.position(new LatLng( 0, -0))
.title("Title")
.snippet("Snippet")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.star)));
googlemap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
Intent intent = new Intent(MainActivity.this,Example2.class);
startActivity(intent);
} });
}}
}
编辑(2013年6月7日):
private GoogleMap googlemap;
private Map<Marker, Class> allMarkersMap = new HashMap<Marker, Class>();
以上是在班级^^^
Marker marker1 = googlemap.addMarker(new MarkerOptions()
.position(new LatLng(0,0))
.title("England")
.snippet("London")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.star)));
allMarkersMap.put(marker1, Contact.class);
}
public void onInfoWindowClick(Marker marker) {
Class cls = allMarkersMap.get(marker);
Intent intent = new Intent(MainActivity.this, cls);
startActivity(intent);
}
以上^^^^在我的“protected void onCreate(Bundle savedInstanceState){”下。没有错误,当我调试时我可以看到Marker但无法点击InfoWindow。警告是:
Class is a raw type. References to generic type Class<T> should be parameterized
我在课程级别上看到了这个警告两次,并且在公共虚空中看到了一次onInfoWindow点击了 'Class' 这个词。我尝试了一些不同的东西,比如“为'Class'添加类型参数但它不起作用。在公共空白中标记标记我将标记更改为< strong> marker1 并在 allMarkersMap.get(marker); 下面的行上将(标记)更改为(marker1)尝试但它没有用。我还能做些什么来尝试初始化onInfoWindowClick函数吗?
答案 0 :(得分:8)
来自MaciejGórski的帮助是在GoogleMapsV2上点击单独的Marker infowindows时打开不同类(活动,例如页面)的示例:
在GoogleMap课程级别添加此内容:
private GoogleMap googlemap/mMap (or whatever you call yours);
private Map<Marker, Class> allMarkersMap = new HashMap<Marker, Class>();
在protected void onCreate(Bundle savedInstanceState)下面{ super.onCreate(savedInstanceState); 放入你的标记:
Marker marker = googlemap.addMarker(new MarkerOptions()
.position(new LatLng(0,-0))
.title("London")
.snippet("North London")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.star)));
allMarkersMap.put(marker, NorthLondon.class);
googlemap.setOnInfoWindowClickListener(this);
Marker marker1 = googlemap.addMarker(new MarkerOptions()
.position(new LatLng(0244534,-1232312))
.title("USA")
.snippet("Washington")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.star)));
allMarkersMap.put(marker1, Washington.class);
googlemap.setOnInfoWindowClickListener(this);
Marker marker2 = googlemap.addMarker(new MarkerOptions()
.position(new LatLng(42343244,-0.334322))
.title("Italy")
.snippet("Rome"));
allMarkersMap.put(marker2, Rome.class);
googlemap.setOnInfoWindowClickListener(this);
}
public void onInfoWindowClick(Marker marker) {
Class cls = allMarkersMap.get(marker);
Intent intent = new Intent(MainActivity.this, cls);
startActivity(intent);
}
以上是单独的标记。如果我要创建另一个,我会称之为Marker marker3,然后是4,5等...它在 allMarkersMap.put(marker,.class)中要求.class; 输入你的类想要,所以它打开你想要的东西。公共无效的OnInfoWindowClick代码下面的标记代码,这是回调。
就是这样。当您在标记中单击InfoWindows时,他们应该打开您在MarkerOptions代码中放置的活动类!
归功于MaciejGórski
答案 1 :(得分:1)
set
中的setOnInfoWindowClickListener
一词意味着它会覆盖之前set
的任何值。此函数在GoogleMap
对象上调用,因为有一个GoogleMap
个对象,所以有一个OnInfoWindowClickListener
处于活动状态。
使用它的方式是根据回调onInfoWindowClick(Marker marker)
中使用if else
,switch
或Map<Marker, Class>
的参数来决定会发生什么:
public void onInfoWindowClick(Marker marker) {
Class cls = map.get(marker);
Intent intent = new Intent(MainActivity.this, cls);
startActivity(intent);
}
当然,您需要提前初始化此地图:
Marker marker1 = googlemap.addMarker...
map.put(marker1, Example.class);
修改强>
// on the class level:
private Map<Marker, Class> allMarkersMap = new HashMap<Marker, Class>();
// in the onCreate or elsewhere
Marker marker1 = googlemap.addMarker(new MarkerOptions()
.position(new LatLng(0,-0))
.title("Netherlands")
.snippet("Amsterdam")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.star)));
allMarkersMap.put(marker1, Example.class);
// callback
public void onInfoWindowClick(Marker marker) {
Class cls = allMarkersMap.get(marker);
Intent intent = new Intent(MainActivity.this, cls);
startActivity(intent);
}
答案 2 :(得分:0)
问题:
Class is a raw type. References to generic type Class<T> should be parameterized
我添加&lt; ? Class:
旁边的&gt;private Map<Marker, Class<?>> allMarkersMap = new HashMap<Marker, Class<?>>();
和
Class<?> cls = allMarkersMap.get(marker);
如果您已经在片段课程中工作(就像发生在我身上一样),您将会改变:
public void onInfoWindowClick(Marker marker) {
Class<?> cls = allMarkersMap.get(marker);
Intent intent = new Intent(getActivity(), cls);
startActivity(intent);
}