这是我的问题......这可能很简单,但我被卡住了:
上下文
我有一些从互联网上下载的信息(文字和小图片),当我在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);
}
我做错了什么?我错过了什么? 感谢
答案 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)中的进度。