0

次の状況を開発する必要があります。TabHost を含む main_screen.xml があり、2 つ (またはそれ以上) のタブがあり、それぞれに ViewPager のルート要素があります。

ViewPager には、MainViewList->DetailView->MapView の順で 2 つ (またはそれ以上) のページがあり、MapView->DetailView->MainViewList (M->D->M) に戻ります。

そこに私は問題があります:最初のパスではすべて正常に動作しますが、M->D->M の後で、MapActivity でインフレートできる MapView が 1 つだけという例外を除いてクラッシュします。

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); 問題が 1 つあります。常に同じ MapView インスタンスで作業することです。

于 2012-09-10T06:52:24.377 に答える