我有一段代码可以让一个标记在单击信息窗口时启动一个活动。它完全正常运行。但是当我尝试添加另一个标记和另一个@override时,它总是在所有标记的信息窗口中打开最后一个类。因此,实质上,所有标记的信息窗口在单击时都打开相同的活动,而不是打开我打算打开的单独类。
以下是成功打开1个InfoWindowClicked活动的代码。我称之为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 代码。
确保在代码中的某个地方也有(通常在一个私有的 void 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);
} });
}}
}
Edit (07/06/2013):
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){" 下。没有错误,当我调试时,我可以看到标记,但无法单击 InfoWindow。警告信息如下:
Class is a raw type. References to generic type Class<T> should be parameterized
我在类级别上看到了这个警告两次,在公共void onInfoWindowClick中的单词'Class'上也看到了一次。我尝试了一些不同的方法,比如“为'Class'添加类型参数”,但它没有起作用。在公共void中的Marker marker上,我将marker更改为marker1,并在下面的行allMarkersMap.get(marker);中将(marker)更改为(marker1),只是为了尝试一下,但它没有起作用。还有其他什么我可以做来尝试初始化onInfoWindowClick函数吗?
OnInfoWindowClickListener
? - MaciejGórskigooglemap.setOnInfoWindowClickListener(this);
呢? - MaciejGórski