2012-05-10 27 views
3

私のアプリケーションでは、ViewPagerの内部にマップビューを実装しようとしています。私はアプリケーションで4つの異なるページを持っています。 MapViewは4ページ目にあります。私はマップを正常にロードしましたが、最初のページにスワイプすると、destroyItem()メソッドを使用して4番目のビューを破棄する必要があります。そして、私は4ページ目にスワイプすれば、それはlogcatでエラーを示す3ページ目からクラッシュ:MapViewはViewPagerから削除されていませんか?

05-10 13:14:50.152: E/AndroidRuntime(620): java.lang.IllegalStateException: You are only allowed to have a single MapView in a MapActivity 

MapActivityで唯一の単一のMapViewを持つことの意識イム。しかし、私はそれを解決することができません - 誰も私を助けることができますか?

コードは以下の通りです:Androidのビューポケットベルで

public Object instantiateItem(View collection, int position) { 

    LayoutInflater inflater = (LayoutInflater) collection.getContext() 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    context = collection.getContext(); 
    int resId = 0; 
    int flag = resId; 
    switch (position) { 
    case 0: 
     resId = R.layout.farleft; // first 
     view = inflater.inflate(resId, null); 

     break; 
    case 1: 
     resId = R.layout.left; // second 
     view = inflater.inflate(resId, null); 

     break; 
    case 2: 
     resId = R.layout.right; // third 
     view = inflater.inflate(resId, null); 

     break; 
    case 3: 
     resId = R.layout.mylocator; 
     view = inflater.inflate(resId, null); 
     break; 

    } 
    ((ViewPager) collection).addView(view, 0); 

    return view; 
} 

@Override 
public void destroyItem(View arg0, int arg1, Object arg2) { 

    ((ViewPager) arg0).removeView((View) arg2); 
    Log.d("destroyItem", "" + arg2); 
} 

答えて

0

1つの問題は、ビューをリサイクルすることは手動で行わなければならないことです。ビューがまだ破棄されていない可能性がありますが、ビューが再度インスタンス化されたときに2回目に作成されます。各ページのビューを保存し、既に破棄されていない場合はinstantiateItemに戻すことができます。

+1

uはで私を助けてもらえいくつかのサンプルコード? –

+0

私は同じ問題を抱えていますが、私はこれを@Sepplの答えで試してみました。 HashMap itemList; パブリックオブジェクトinstantiateItem(のViewGroup容器、INT位置){ \t \t IF(itemList.get(位置)!= NULL){ \t \t \tリターンitemList.get(位置)。 \t \t \t \tオブジェクトviewGroup = super.instantiateItem(container、position); \t \t \t \t itemList.put(position、viewGroup); \t \t \t \t return viewGroup; \t \t \t 編集:コメントにコードを書式設定するにはどうすればよいですか? –

1

解決策が見つかりました。地図が含まれており、それはViewPagerで使用されているあなたのフラグメント内部 、という置く:それは私のために正常に動作

private View myView; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    if (this.myView == null){ 
     this.myView = inflater.inflate(R.layout.my_layout, container, false); 
    } 
    else if (this.myView.getParent() != null) { 
     FrameLayout parentView = (FrameLayout) this.myView.getParent(); 
     parentView.removeView(this.myView); 
    } 

    return this.myView; 

} 

、それはあなたのために働くなら、私に教え;)

関連する問題