Android 如何在 google map v2 的 fragment 中传递类对象?

标签 android google-maps-android-api-2

我正在使用 Android 谷歌地图,我正在使用 MapApiV2。我能够在 map 上显示 map 、用户位置和标记。我的问题是我想在用户单击 map 上的任何标记时打开一个信息窗口。我也可以打开窗口,但我需要在信息视频中显示更多数据,因此我试图在 .snippet() 方法中传递我的 CustomClass 对象,但它只传递字符串对象。所以我通过简单地执行此操作 (uv.tostring) 并将我的类对象转换为字符串并传递给 snippet() 方法。现在另一方面,当我尝试使用 marker.getSnippt(); 从 fragment 中获取数据时;我无法从字符串访问我的数据。所以请建议我如何将我的自定义类对象传递给 snippt,以便我可以访问自定义类的 get、set 方法。

下面是我的代码 我的自定义类是:

public class UserVerifyer implements UserVerfierInterface{
    // <userPojo>
    // <frequency>0.0</frequency>
    // <message/>
    // <status>NOTOK</status>
    // <token>ey0dok0vozrhwhe98rt6ydbs</token>
    // <url/>
    // </userPojo>
    private String frequency = "", message = "", status = "", token = "",
            url = "";
    public static String statusOk = "OK";

    public void setFrequency(String freq) {
        this.frequency = freq;
    }

    public String getFrequency() {
        return frequency.trim();

    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message.trim();

    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getStatus() {
        return status.trim();

    }

    public void setToken(String token) {
        this.token = token;
    }

    public String getToken() {
        return token.trim();

    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUrl() {
        return url.trim();

    }
}

MyCustomInfo 窗口类是:

公共(public)类 CustomMarkers 实现 InfoWindowAdapter {

// private Context context;
// private String text;
// private Integer image;
private final View mWindow;
private final View mContents;

public CustomMarkers(Activity activity) {
    // this.context = ctx;
    // this.text = text;
    // this.image = image;
    LayoutInflater inflater = (LayoutInflater) activity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    mWindow = inflater.inflate(R.layout.balloon, null);
    mContents = inflater.inflate(R.layout.balloon, null);

}

@Override
public View getInfoContents(Marker marker) {
    // TODO Auto-generated method stub
    render(marker, mWindow);
    return mWindow;
}

@Override
public View getInfoWindow(Marker marker) {
    // TODO Auto-generated method stub
    render(marker, mContents);
    return mContents;
}

private void render(Marker marker, View view) {
    String title = marker.getTitle();
    TextView titleUi = ((TextView) view.findViewById(R.id.txtTitle));

    if (title != null) {
        titleUi.setText(title);
    } else {
        titleUi.setText("");
    }

    String snippet = marker.getSnippet();
    UserVerifyer uv = UserVerifyer.class.cast(snippet);
    System.out.println("Sttaus in Marker= "+uv.getStatus());
    // uv.getStatus();
    TextView snippetUi = ((TextView) view.findViewById(R.id.txtPlace));
    if (snippet != null) {
        snippetUi.setText(snippet);
    } else {
        snippetUi.setText("");
    }
}

我正在像这样在标记中添加数据:

CameraPosition cameraPosition = new CameraPosition.Builder()
                .target(new LatLng(getMyLocation().getLatitude(),
                        getMyLocation().getLongitude())).zoom(17).bearing(90)
                .tilt(30).build();
        mMap.animateCamera(CameraUpdateFactory
                .newCameraPosition(cameraPosition));
        UserVerifyer uv = new UserVerifyer();

        mMap.addMarker(new MarkerOptions()
                .position(
                        new LatLng(getMyLocation().getLatitude(),
                                getMyLocation().getLongitude()))
                .title("Me")
                .snippet(uv.toString())
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.user_loc)));
        mMap.setInfoWindowAdapter(new CustomMarkers(RecomendationScreen.this));

请建议我该怎么做。

谢谢。

最佳答案

解决方案: 与其转换为字符串并深入研究复杂性,我想建议您使用替代方法以非常有效的方式实现预期结果。

您可以创建一个 HashMap<Marker, UserVerifyer> , 你可以检索 UserVerifyer 的对象通过使用 Marker作为 key 。因此您可以轻松地放置数据并从 HashMap 检索数据.

引用: 看看this example .它的表现完全符合我的意思。

希望对您有所帮助!!

关于Android 如何在 google map v2 的 fragment 中传递类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16573687/

相关文章:

java - 初始屏幕填满整个智能手机屏幕,但不裁剪

android - 服务正在创建媒体播放器的新实例

android - 谷歌地图 v2 中是否弃用了 'constructor LocationRequest()'?

android - 如何更改地理围栏的形状

java - 如何暂停和恢复倒计时器?

android - 修改彩信以删除删除功能?

android - Fragment 中的 notifyDataSetChanged() 不刷新 ListView

Android 运行时 : FATAL EXCEPTION: androidmapsapi-ZoomTableManager

android - 从谷歌地图的可见部分检索距离

android - 如何防止 Google Map V2 Android 中的蓝点更新?