切换到横向后,OSMBonusPack标记不会显示气泡

时间:2014-03-17 12:42:19

标签: android map android-activity openstreetmap osmdroid

这是我的问题......这可能很简单,但我被卡住了:

上下文

我有一些从互联网上下载的信息(文字和小图片),当我在myMarkers课程中点击时,我想在泡泡中显示它。我希望这项工作既有风景,也没有。

问题

当应用程序是肖像时,当我杀死应用程序并重新运行它时,一切正常(当我点击我看到带有文本和img的气泡时)。 当我转向风景时,当我的应用程序不可见但活着时,地图会恢复标记,但是当我点击它们时,它们不会显示气泡。

代码

这里是 Marker 的实现,它实现Parcelable,以便在我的Activity为onPause()时调用Bundle时将其保存到onSaveInstanceState(省略的空覆盖方法):

class myMarker extends Marker implements Parcelable{

            public myMarker(MapView mapView) {
                    super(mapView);
            }

            public  Parcelable.Creator<myMarker> CREATOR = new Parcelable.Creator<myMarker>() {

            public myMarker createFromParcel(Parcel in) {
                return new myMarker(map);
            }

            public myMarker[] newArray(int size) {
                return new myMarker[size];
            }
            };

}

我们在活动中的onCreate()内:

 if (savedInstanceState != null) {
    // Restore myMarkers
    markers = savedInstanceState.getParcelableArrayList("MARKERS");
    for (int i=0;i<markers.size();i++){                  
         map.getOverlays().add(markers.get(i));
         Marker m=markers.get(i);

            }
         map.invalidate();
        } 
 else {
    markers=new ArrayList<myMarker>();
        }

保存过程:

@Override
      public void onSaveInstanceState(Bundle savedInstanceState) {
          // Save the user's current state
          savedInstanceState.putParcelableArrayList("MARKERS", markers);

          // Always call the superclass so it can save the view hierarchy state
          super.onSaveInstanceState(savedInstanceState);
      }

我做错了什么?我错过了什么? 感谢

2 个答案:

答案 0 :(得分:1)

我已解决

我认为有一个问题。每次您在横向上翻转设备时,Marker的{​​{1}}都会对MarkerInfoWindow有一个旧参考,这就是点击时未显示气泡的原因。 (也许可以使用片段修复...)

只需重写类,重新创建标记时,只需将新引用传递给上下文。

代码:

Context

onRestore,当您在onSave:

之后重新加载横向地图时
public class myMarker extends Marker implements Parcelable{
    InfoWindow i;
    MapView map;
    static Context context=null;
    static MarkerInfoWindow ma=null;



    public myMarker(MapView mapView) {
    super(mapView);
    Context c=mapView.getContext();
   /*IF THE CONTEXT CHANGES, I KEEP MY NEW (RECREATED) mapView AND I SET A NEW static 
   MarkerInfoWindow OTHERWISE AT ANY CASE I SET THE static markerInfoWindow TO THE MARKER */
    if(context==null||context!=c){
    i=super.mInfoWindow;
    map=mapView;
    context=c;
    String packageName=context.getPackageName();
    int layoutResId=context.getResources().getIdentifier("layout/bonuspack_bubble",null,packageName);
    ma=new MarkerInfoWindow(layoutResId, mapView);
    }
    super.setInfoWindow(ma);


}
...
}

答案 1 :(得分:1)

嗯,我确认,你在OSMBonusPack Marker中发现了一个问题(我是开发人员) =&GT;静态MarkerInfoWindow mDefaultInfoWindow不支持MapView更改。

您找到了一个示例:更改方向,您的构造函数似乎是修复它的好方法。

但还有其他情况:在同一个应用程序中有多个MapView。更复杂。

我将尝试直接在lib中修复该问题。 您可以关注项目问题(issue #58)中的进度。