Android:如何将对象传递给新的启动活动

时间:2013-09-23 13:24:46

标签: android google-maps android-intent google-maps-markers android-dialog

目前我正在制作谷歌地图标记点击信息窗口连接到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);
}

3 个答案:

答案 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或任何其他自定义类。