0

我需要开发下一个情况:我有带有 TabHost 的 main_screen.xml,它有两个(或更多)选项卡 - 每个选项卡都有作为根元素 ViewPager。

ViewPager 有两个(或更多)页面下一个序列 MainViewList->DetailView->MapView 并返回 MapView->DetailView->MainViewList (M->D->M)

我有问题:在第一次通过时一切正常,但在再次 M->D->M 之后它崩溃了,但只有一个 MapView 可以用 MapActivity 充气。

我通过调试检查了 ViewPagerAdapter 上的 destroyItem 方法可以正常工作 - 它从 parentView (ViewPager) 中删除 MapView。

然后我去 Map->D->M 我从 ViewPagerAdapter prevscreen 中的屏幕列表中删除 - 所以如果向左滑动我无法返回屏幕(第一个屏幕,或 MapView 之后的 DetailView,我无法滑回 MapView - 我需要这个逻辑有效)。

您还可以看到这篇文章MapView 没有从 ViewPager 中删除?有同样的问题。

4

1 回答 1

0

所以我找到了下一个解决方案

ViewPager 是任何 Activtiy 的一部分,所以我创建活动下一个代码

class FirstTabActivityWithMap extends MapActivity{
 MapViewHolder mpViewHolder;//Extends ViewHolder and contains MapView inflated from layout resource

protected void onCreate(...){
// Create view pager
 myViewPager=new ViewPager();//And etc init Pager

//Some code witch create mpViewHolder - it's depend of yours needs
 setContentView(myViewPager);
}

//Here is magic :)
public void someActionWichNeedAddScreenWithMap(){

 //Remove current map from prev parent 
 if (mpViewHolder.currentView.getParent() != null) {
    ((ViewPager) mpViewHolder.currentView.getParent())
        .removeView(mpViewHolder.currentView);
    }
    this.myViewPager.addScreen(mpViewHolder);//Adding screen and call notifyDataSetChanged()
 }

}

此代码 ((ViewPager) mpViewHolder.currentView.getParent()).removeView(mpViewHolder.currentView); 有一个问题 - 你总是会使用同一个 MapView 实例。

于 2012-09-10T06:52:24.377 回答