1

目前我正在制作点击信息窗口上的谷歌地图标记连接到wifi,所以我有一个自定义的警报对话框活动来登录接入点,从那个对话框活动中,我需要使用标记参数回调连接方法,如何如果我想调用wificonnector(m)那个新类,我将 Marker m 参数传递给新活动?似乎putextra在这里不起作用

public void wificonnector(Marker marker) 
        {...}

@Override
public void onInfoWindowClick(Marker m) {

Intent i = new Intent(myMap.this, ConnectDialog.class);
i.putExtra("marker",m);                  
startActivity(i);
}
4

3 回答 3

1

因为 Intent 使用Bundle向另一个 Activity 提供数据,所以您不能在 Extras 中放置 Marker。Marker 类不使用 Parcelable 或 Serializable 接口,这是将 Object 放入 Bundle 所必需的。

但是您可以将其MarkerOptions放入其中并在您的 ConnectDialog 类中创建一个新的标记。

于 2013-09-23T13:29:40.777 回答
1

如果您需要 ssid ConnectDialog,为什么不发送该值而不是整体Marker

Intent i = new Intent(myMap.this, ConnectDialog.class);
String ssid = m.getSnippet(); // or title, depending on where you store ssid
i.putExtra("ssid",ssid);
startActivity(i);

Marker对象应该像View对象一样对待。如果您尝试将它们发送到它们的上下文之外,它们会导致内存泄漏。

于 2013-09-23T14:16:20.633 回答
0

有很多可能性。

非常流行的是在代码中设置静态变量,如:

ConnectDialog.marker = marker;    
Intent i = new Intent(myMap.this, ConnectDialog.class);
i.putExtra("marker",m);                  
startActivity(i);

然而使用这样的静态变量非常快——那么代码的可读性似乎不是很清楚,主要是在大型应用程序中。这样的建筑似乎有点臭。

其他可能性是获取“可序列化”的自定义类并通过意图附加功能推送它。这样的示例可以是 MarkerOptions 或任何其他自定义类。

于 2013-09-23T13:32:11.557 回答