2011-11-27 74 views
5

我注意到娱乐,使用一个FragmentPagerAdapter是不相邻于当前一个都具有自己的看法破坏(并且调用其onPause()onStop()方法,奇怪onSaveInstanceState(Bundle)没有被碎片时称为),并且onCreateView正被再次调用这些碎片。我的问题是我在这些碎片上运行了一些Timer,重新创建它们是不可行的,因为这些定时器应该触发并更新相关的碎片UI。对于大屏幕,我使用HorizontalScrollViewLinearLayout,它的工作完美无瑕。FragmentPagerAdapter - 避免的片段的观点

在我的活动相关的代码:

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

是的,这解决了我的问题..谢谢@Saimon – bebosh

0

您应该FragmentStatePagerAdapter而不是FragmentPagerAdapter延伸。 方法onCreate(Bundle savedInstanceState)不应该再次被调用。

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); 
相关问题