6
使用RecyclerView的碎片在ViewPager中出現問題。刷新後重新創建碎片時,重複RecyclerView會出現重疊。 我正在使用ViewPager,Fragment,FragmentStatePagerAdapter使用ViewPager後出現的RecyclerView重複碎片
圖1:第一次有RecyclerView是好的。
圖2:在滑動多個片段然後滑回同一片段之後,在滾動時重複的片段會重疊。
使用FragmentStatePagerAdapter
class SlidingFragmentPagerAdapter extends FragmentStatePagerAdapter {
SparseArray<FragmentMain> registeredFragments = new SparseArray<FragmentMain>();
FragmentManager fm;
public SlidingFragmentPagerAdapter(FragmentManager fm) {
super(fm);
this.fm = fm;
}
@Override
public Fragment getItem(int position) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1 * (FragmentViewPager.MAX_PAGE - position - 1));
return FragmentMain.newInstance(position + "", cal.getTime());
}
@Override
public int getCount() {
return MAX_PAGE;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
FragmentMain fragment = (FragmentMain) super.instantiateItem(container, position);
registeredFragments.put(position, fragment);
return fragment;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
registeredFragments.remove(position);
super.destroyItem(container, position, object);
}
public FragmentMain getRegisteredFragment(int position) {
return registeredFragments.get(position);
}
}
使用ViewPager
mViewPager = (ViewPager) view.findViewById(R.id.viewpager);
rootView.findViewById(R.id.img_floating_btn2);
mSlidingTabLayout = (SlidingTabLayout) view.findViewById(R.id.sliding_tabs);
mSlidingTabLayout.setDistributeEvenly(true);
adapter = new SlidingFragmentPagerAdapter(getFragmentManager());
mViewPager.setAdapter(adapter);
mViewPager.setCurrentItem(MAX_PAGE);
mSlidingTabLayout.setViewPager(mViewPager);
注意 我試過使用mViewPager.setOffscreenPageLimit(adapter.getCount()); buti在ViewPager中有超過50個片段
當你離開尋呼機時,你是在摧毀碎片嗎? –
我並沒有摧毀它們。 – touchchandra
我假設你在一個片段中使用ViewPager,在這種情況下,當你實例化適配器時,使用getChildFragmentManager()而不是getFragmentManager()。 – Luksprog