2015-08-22 22 views
6

Phân đoạn bằng RecyclerView đang gặp sự cố trong ViewPager. Duplicyc RecyclerView xuất hiện chồng lên nhau khi các mảnh được tạo lại sau khi vuốt. Tôi đang sử dụng ViewPager, Fragment, FragmentStatePagerAdapterMảnh vỡ trùng lặp với RecyclerView xuất hiện trong ViewPager sau khi vuốt

Pic 1: Lần đầu tiên có RecyclerView là tốt.

Pic 2: Sau khi vuốt nhiều đoạn và sau đó vuốt trở lại cùng một đoạn thì các phần trùng lặp sẽ bị trùng lặp trong khi cuộn.

Pic 1 Pic 2

sử dụng 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); 
     } 
    } 

Sử dụng 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); 

Note Tôi đã thử sử dụng mViewPager.setOffscreenPageLimit (adapter.getCount()); buti có hơn 50 đoạn trong ViewPager

+0

bạn có đang hủy các phân đoạn khi họ rời khỏi máy nhắn tin không? –

+0

Tôi không phá hủy chúng. – touchchandra

+0

Tôi giả sử bạn đang sử dụng ViewPager đó trong một đoạn trong trường hợp này sử dụng getChildFragmentManager() thay vì getFragmentManager() khi bạn khởi tạo bộ điều hợp. – Luksprog

Trả lời

2

Tôi gặp vấn đề tương tự, tôi đã có một ViewPager với RootFragment chứa các đoạn khác. Tôi đã thêm những đoạn này vào RootFragment với:

getFragmentManager().beginTransaction().add(containerLayout.getId(), ItemFragment.newInstance()).commit(); 

Tôi đã sửa nó bằng cách thay đổi nó để thay thế thay vì thêm.

getFragmentManager().beginTransaction().replace(containerLayout.getId(), ItemFragment.newInstance()).commit(); 

Ngay cả khi vùng chứa trống bạn phải sử dụng thay thế thay vì thêm!

Các vấn đề liên quan