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.
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
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? –
Tôi không phá hủy chúng. – touchchandra
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