当前位置: 首页 > 知识库问答 >
问题:

OSMBonusPack标记在切换到景观后不显示气泡

龚永新
2023-03-14

我有一些我从互联网上下载的信息(文本和小的img),我想在我点击myMarkers类时显示它在气泡中。我希望这幅画既能画出风景,又不能画出风景。

问题

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

代码

这里是我的标记实现,它实现parcelable,以便在我的活动转到onPause()时调用onSaveInstanceState时将它们保存到bundle中(省略的空重写方法):

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

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

共有1个答案

百里飞捷
2023-03-14

我下定决心

我认为有一个问题。每次将设备打开landscape时,标记MarkerInfowIndow都有一个对上下文的旧引用,这就是为什么单击时不会显示气泡的原因。(也许可以用碎片修复...)

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

代码:

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




      }
 类似资料:
  • 我显示了一个标记来显示用户的位置,这是通过电话GPS获得的,并且我添加了一个FolderOverlay来分组其他标记(这些标记表示使用自定义API检索的Wikipedia中的POI)。 我在我的项目中包含了bonuspack_bubble.xml布局文件,因为我想修改它以适当地缩放“More Info”按钮。 问题 谢谢! 注意:使用osmbonuspack V5.3(AAR)、osmdroid

  • Tei正在尝试用OSM地图取代我应用程序中的谷歌地图。我一直试图通过学习他们如何使用JitPack安装和导入项目来使用这一点。工作很好。点击标记时,会显示默认信息气泡(一些浅灰色的)。如果我想修改标记气泡的背景,我应该怎么做?我没有在代码中使用任何类型的onClick方法 任何建议都将得到高度赞赏!

  • 我无法使用OSMbonuspack标记,因为无法识别导入 给出的错误不能解析符号“marker”,尽管项目中有osmdroid(v5.6.4)和osmbonuspack(v6.3)。 有没有人知道这为什么不行?

  • 我正在学习Jupyter笔记本的降价单元格,并尝试使用以下代码为我的一本笔记本创建一个简单的深红色标题: 在Jupyter笔记本中,当我运行单元格时,这变成了一个深红色的标题,正如预期的那样,这里有一个大纲:http://datascience.ibm.com/blog/markdown-for-jupyter-notebooks-cheatsheet/. 当我将笔记本上传到GitHub时,我的J

  • 这个代码过去是有效的,但我不确定我改变了什么,或者在传单中改变了什么来打破它,但没有显示标记。数据正确返回,正在创建标记对象,但未显示任何标记。我在这里不知所措。使用0.7.2。让我给你看看代码。。。 } 一切都应该很好。服务器正确返回信息。列表中始终有13项(预期行为),我将plostlist[I]的内容以及plotmarker对象打印到控制台。 以下是plotlist[i]的输出: 一切看起来

  • 我希望将行插入到表中,但这些行被回显,但没有显示在表中。 项目的HTML代码为: 项目的main.js文件是:它从下面的PHP文件中取数据: 项目的PHP代码是: