2015-08-22 11 views
6

रीसाइक्लिंग व्यू के साथ फ्रैगमेंट व्यूपेजर के अंदर समस्या हो रही है। डुप्लिकेट रीसाइक्लिंग व्यू ओवरलैप्ड होता है जब स्वाइप करने के बाद टुकड़े फिर से बन जाते हैं। मैं व्यूपेजर, फ्रैगमेंट, फ्रैगमेंटस्टेट पेजर एडाप्टररीसाइक्लिंग व्यू के साथ डुप्लिकेट फ्रैगमेंट्स

Pic 1 का उपयोग कर रहा हूं: पहली बार रीसाइक्लर व्यू ठीक है।

Pic 2: एकाधिक टुकड़ों को स्वाइप करने के बाद और फिर उसी टुकड़े पर वापस स्वाइप करने के बाद स्क्रॉल करते समय डुप्लिकेट टुकड़े ओवरलैप हो जाते हैं।

Pic 1 Pic 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

+0

क्या आप टुकड़े को नष्ट कर रहे हैं क्योंकि वे पेजर छोड़ते हैं? –

+0

मैं उन्हें नष्ट नहीं कर रहा हूं। – touchchandra

+0

मुझे लगता है कि आप उस व्यूपार्जर को एक टुकड़े में उपयोग कर रहे हैं, जिसमें आप एडाप्टर को तुरंत चालू करते समय getFrmentManager() के बजाय getChildFragmentManager() का उपयोग करते हैं। – Luksprog

उत्तर

2

में 50 से अधिक टुकड़े हैं, मुझे एक ही समस्या थी, मेरे पास एक रूटफ्रैगमेंट के साथ व्यूपाजर था जिसमें अन्य टुकड़े थे। मैंने इन टुकड़ों को रूटफ्रैमेंट में जोड़ा:

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

मैंने इसे जोड़ने के बजाय इसे बदलने के लिए इसे बदलकर तय किया।

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

कंटेनर खाली होने पर भी आपको जोड़ने के बजाय प्रतिस्थापन का उपयोग करना होगा!

संबंधित मुद्दे