谷歌地图,在回调中添加标记方法只能使用一次(Android)

时间:2015-02-24 19:52:50

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

当我尝试将标记添加到GoogleMap时,我遇到了麻烦

故事:我打开应用,然后打开包含Google地图的活动。 HTTP请求已正确执行,标记添加完美,没有任何问题。我可以点击每一个,等等。但是,如果我按下后退按钮,然后再次进入活动,所有标记都丢失..​​.所以我调试试图找到方法被调用,是的它被调用。据说添加了标记(但我看不到它们)。

所以只有在我第一次打开活动时才有效。当我再次打开活动时......标记缺失。

以下是代码:

我的活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);

    ...

    // setup map
    final MapFragment mapFragment = (MapFragment)getFragmentManager().findFragmentById(R.id.googleMap);
    mapFragment.getMapAsync(this);
}

我有一个监听器,这个方法是由AsyncTask(postExecute)调用的,发了一个Http请求然后 收到了jsonArray - >添加标记

@Override
public void onRequestCompleted(final JSONArray json) {
    // verified, json is correct
    Log.i(Constant.TAG, "Ok! - " + json);

    for (int i = 0; i < json.length(); i++) {
    try {
         // verified, place is correct
         Place place = new Place(json.getJSONObject(i));

         if (place != null) {
         // Try with place
         LatLng markerPosition = new LatLng(place.getLat(), place.getLon());
         // setup marker
         MarkerOptions markerOptions = new MarkerOptions();
         markerOptions.title(place.getPlaceName());
         markerOptions.position(markerPosition);

         // Try with default marker (hardcoded)
         LatLng markerPosition = new LatLng(14.64281,-90.51271);

         // setup marker
         MarkerOptions markerOptions = new MarkerOptions();
         markerOptions.title("duka");
         markerOptions.position(markerPosition);
         mMap.addMarker(markerOptions)
         }
         } catch (JSONException e) {
             e.printStackTrace();
         }
     }
}

我的XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment
        android:id="@+id/googleMap"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.google.android.gms.maps.MapFragment"/>

</LinearLayout>

由于上面的代码不起作用,我只尝试使用一个标记。但是输出是一样的。 (第一次打开,它工作。第二次没有)

 runOnUiThread(new Runnable() {

        public void run() {
            // add marker here... but doesn't work
             // Try with default marker (hardcoded)
         LatLng markerPosition = new LatLng(14.64281,-90.51271);

         // setup marker
         MarkerOptions markerOptions = new MarkerOptions();
         markerOptions.title("duka");
         markerOptions.position(markerPosition);
         mMap.addMarker(markerOptions)
        }
    });

谢谢!

0 个答案:

没有答案