【发布时间】:2013-05-28 22:25:53
【问题描述】:
当您单击信息窗口时,我有代码可以让一个标记开始一项活动。它工作得很好。但是当我尝试添加另一个标记和另一个@override 时,它总是会在所有标记信息窗口上打开最后一个类。因此,本质上,所有标记信息窗口在单击时都会打开相同的活动,而不是打开我想要打开的单独类。
这是成功打开 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 代码。
确保代码中的某处也存在(通常在私有 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);
} });
}}
}
编辑 (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) {”下。没有错误,当我调试时我可以看到标记但无法单击信息窗口。警告是:
Class is a raw type. References to generic type Class<T> should be parameterized
我在类级别看到此警告两次,一次在公共 void onInfoWindow 中单击单词 'Class'。我尝试了一些不同的方法,例如“将类型参数添加到 'Class' 但它不起作用。在公共无效的 Marker marker 上,我将 marker 更改为 marker1 并在 allMarkersMap.get(marker); 下的行将 (marker) 更改为 (marker1) 只是为了尝试了,但没有成功。我还能做些什么来尝试初始化 onInfoWindowClick 函数?
【问题讨论】:
-
你注册
OnInfoWindowClickListener和原码一样吗? -
是的,我有。我已将 OnInfoWindowClickListener 放入顶部的“MainActivity 扩展 Activity 实现”中。我已经尝试了 public void onInfoWindowClick(Marker marker) 上面有和没有@Override 。我不知道为什么它没有注册。我已经取出了 googlemap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() { 就像原来的一样。
-
然后打电话给
googlemap.setOnInfoWindowClickListener(this);? -
好的,它的工作!让我尝试添加更多!
-
它适用于 1 个标记,当我尝试添加两个标记时,我的地图实际上不再加载。我收到 AndroidRuntime 错误,包括 .handleLaunchActivity 和 IBitmapDescriptorFactory 未初始化。致命异常:主要。