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



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

<<p> 上下文/strong>

我有一些信息,我从互联网(文本和小图片)下载,我想显示它里面的气泡当我点击myMarkers类。我希望这幅画既能风景画,也能不风景画。

当应用程序是纵向的,当我杀死应用程序并重新运行它时,一切都在工作(当我点击我看到带有文本和img的气泡)。当我切换到横向模式,当我的应用程序不可见但仍然存在时,地图会恢复标记,但当我点击它们时,它们不会显示气泡。

这里我的实现标记实现Parcelable,以便将它们保存到Bundle当我调用onSaveInstanceState时,我的活动去onPause()(提交空覆盖方法):

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);
      }

我做错了什么?我错过了什么?由于

我决定

我认为有一个问题。每次你打开设备横向,MarkerMarkerInfoWindow有一个旧的参考Context,这就是为什么气泡不显示点击。(也许可以使用片段修复…)

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

代码:

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);

}
...
}

和onRestore,当你横向加载地图时,在onSave之后:

/*@ onRestore i keep my old markers and i create new markers with same info but with new mapView(new Context)*/
      @Override
      protected void onRestoreInstanceState(Bundle savedInstanceState){                
      super.onRestoreInstanceState(savedInstanceState);
              if (savedInstanceState != null) {

                  /*NEW MARKERS EQUALS TO THE OLD BUT WITH NEW MAP (NEW CONTEXT)
                  ...AND NO YOU CANT JUST UPDATE THE CONTEXT*/
                   ArrayList<myMarker> markers2;
                    markers2 = savedInstanceState.getParcelableArrayList("MARKERS");
                    if(markers2!=null){
                   for (int i=0;i<markers2.size();i++){
                       myMarker m=new myMarker(map);
                       m.setTitle(markers2.get(i).getTitle());
                       m.setImage(markers2.get(i).getImage());
                       m.setPosition(markers2.get(i).getPosition());
                       m.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
                       markers.add(m);
                            map.getOverlays().add(m);

                         }
                    }

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


      }

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

您发现了一个例子:改变方向,您的构造函数似乎是修复它的好方法。

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

我将尝试直接在lib中修复这个问题。您可以在项目问题(第58期)中跟踪进度。

最新更新