3

我有一个包含一些活动的应用程序,但在每个活动中我都有一些片段。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/

固定的!问题是我在评论中谈到的问题。听众依附于旧活动。添加新的侦听器并完成!

4

0 回答 0