目前我正在制作谷歌地图标记点击信息窗口连接到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);
}
答案 0 :(得分:1)
由于Intents正在使用Bundle向另一个Activity提供数据,因此您无法在其他内容中添加标记。 Marker类不使用Parcelable或Serializable接口,这是将Object放入Bundle所需的。
但是你可以将MarkerOptions
放入其中并在ConnectDialog类中创建一个新的Marker。
答案 1 :(得分:1)
如果您的ConnectDialog
中需要ssid,为什么不发送该值而不是整个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
个对象。如果您尝试将它们发送到其上下文之外,则会导致内存泄漏。
答案 2 :(得分:0)
有很多种可能性。
非常流行的是在代码中设置静态变量,如:
ConnectDialog.marker = marker;
Intent i = new Intent(myMap.this, ConnectDialog.class);
i.putExtra("marker",m);
startActivity(i);
然而,使用这样的静态变量非常快 - 然后代码的可重用性似乎不是很清楚,主要是在大型应用程序中。这种架构似乎有点臭。
其他可能性是获取“Serializable”的自定义类并通过intent extras推送它。这样的示例可以是MarkerOptions或任何其他自定义类。