2011-11-27 1 views
5

を避けるためにはされていませんこれらのフラグメントに対してはonCreateViewが再度呼び出されています。私の問題は、これらのフラグメントで実行されているTimerがあることです。これらのタイマーは、関連するフラグメントUIを起動して更新する必要があるため、再作成することはできません。大画面ではHorizontalScrollViewLinearLayoutと使い、完璧に動作します。FragmentPagerAdapter - 私は<code>FragmentPagerAdapter</code>を使用した場合、現在の1に非隣接しているフラグメントは、自分の意見が破壊持っている(とその<code>onPause()</code>と<code>onStop()</code>メソッドが呼び出され、妙<code>onSaveInstanceState(Bundle)</code>ことに気づいた断片の意見のレクリエーション

私の活動に関連するコード:

private class MyPagerAdapter extends FragmentPagerAdapter implements TitleProvider { 

    public MyPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     if (position == 0) { 
      return mAddNewScenesFragment; 
     } else if (position == 1) { 
      return mGlobalEventsFragment; 
     } else { 
      return mSceneFragments.get(position - 2); 
     } 
    } 

    @Override 
    public int getCount() { 
     return mSceneFragments.size() + 2; 
    } 

    @Override 
    public String getTitle(int position) { 
     if (position == 0) { 
      return "New scene"; 
     } else if (position == 1) { 
      return mGlobalEventsFragment.getTitle(); 
     } else { 
      return mSceneFragments.get(position - 2).getTitle(); 
     } 
    } 
} 

フラグメントは活動のonCreate方法で作成され、他は、実行時にリストに追加することができ、それでも新しいものを追加することなく、第三の断片が破壊されます私が最初のものにスクロールするとき。

破壊を避ける方法はありますか、またはViewPagerを忘れて、小さな画面用にHorizontalScrollViewを使用するだけですか?私は「固定」の振る舞いが本当にユーザビリティに役立つと思うので、私はそれを使用することを選択します。

答えて

16

次のメソッドは、破壊から破片を防ぐ必要があります。

mViewPager.setOffscreenPageLimit(no_of_fragments_to_be_kept_offscreen); 
+4

mFragmentPagerAdapter.setOffscreenPageLimit()ではありません。これはmViewPager.setOffscreenPageLimit(numberOfFragments)です。私は間違いをあまりにも多くの人が誇張して驚いています。 –

+0

あなたは正しい@raychenonです。私は私の答えを更新しました。 – Saimon

+0

はい、これは私の問題を解決しました..ありがとう@サイモン – bebosh

0

あなたはFragmentStatePagerAdapter代わりのFragmentPagerAdapterから拡張する必要があります。 メソッドonCreate(Bundle savedInstanceState)をもう2度呼び出すべきではありません。

0

ビューの破棄を避けるには、制限をページャーに設定する必要があります。

your_pager_obj.setOffscreenPageLimit(no_of_fragments_on_each_side_of_the_current_fragment); 
6

代わりのFragmentPagerAdapterをハッキング、単にViewPagerを使用しています。

int limit = myPagerAdapter.getCount(); 
// Set the number of pages that should be retained to either side of the current page in the view hierarchy in an idle state. 
viewpager.setOffscreenPageLimit(limit); 
関連する問題

 関連する問題