我有一个包含一些活动的应用程序,但在每个活动中我都有一些片段。Activity的布局有一个RelativeLayout作为一个片段容器。我使用 ActionBarSherlock 添加了选项卡导航,并且选项卡用于观看地图。
我使用了 MapViewBalloons 库。当我单击选项卡时,我将片段替换为相应的片段。
在地图片段中,我使用了一个静态变量来保存我的 mapView 对象,而不是每次访问该片段时都创建一个新对象。
我可以进入地图片段,将其移动到那里,触摸并移动地图。然后使用选项卡更改为另一个片段,而不更改活动,我仍然有相同的地图,相同的情况,我可以在那里导航。
问题:如果我按下后退按钮,如果我改变方向(我猜,如果活动被破坏并重新创建)我可以再次进入地图,但是如果我尝试移动到那里它会崩溃并且我得到了这个错误:
无法添加窗口,令牌 android.view.ViewRootImpl$... 无效,您的活动是否正在运行?
static TapControlledMapView mapView;
onCreateView...
if (mapView == null) {
//do things
else
parentViewGroup.removeView(mapView);
Button botonFiltro = (Button) parentViewGroup
.findViewById(R.id.botonFiltro);
parentViewGroup.removeView(botonFiltro);
inf.addView(mapView);
return inf;
我就是这样处理“你只能拥有一张地图”的东西的。
那么...如果我更改活动,为什么会崩溃?我检查了 parentViewGroup 不为空,所以 MapView 有一个父级(我不知道这是否有任何意义)。
我的 TabListener 就是这样;
公共类 MyTabListener 实现 TabListener {
public Fragment fragment;
public MyTabListener(Fragment fragment) {
super();
this.fragment = fragment;
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
//TODO: onTabReselected
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.replace(R.id.fragmentContainer, fragment);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(fragment);
}
最奇怪的是,如果我第一次进去不碰地图,或者第二次,它并没有崩溃。
我是 Android 新手,所以也许我做的不对。有谁能够帮我?
编辑:我使用另一个库来制作兼容的 ABS、片段和地图。我关注了这个博客:http: //xrigau.wordpress.com/2012/03/22/howto-actionbarsherlock-mapfragment-listfragment/
固定的!问题是我在评论中谈到的问题。听众依附于旧活动。添加新的侦听器并完成!