6

kullandıktan sonra işlemleri yürütüyor. Birkaç fragman içeren bir gezinti çekmecesi var ve bunlardan biri iki tane geridönüşümlü fragmanla bir tablayout, Navigasyon çekmecesi parçaları arasında geçiş yaptıktan sonra RecyclerView öğeleri kayboluyor, solüsyon i ViewPager ile yöntem setOffscreenPageLimit() kullanmak gerekir ama bana soru başlığı burayaFragmentManager, method setOffscreenPageLimit()

belirtilen hata veren benim logcat olduğunu

java.lang.IllegalStateException: FragmentManager is already executing transactions 
                       at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1626) 
                       at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:679) 
                       at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143) 
                       at android.support.v4.view.ViewPager.populate(ViewPager.java:1240) 
                       at android.support.v4.view.ViewPager.populate(ViewPager.java:1088) 
                       at android.support.v4.view.ViewPager.setOffscreenPageLimit(ViewPager.java:852) 
                       at com.amir.ahmed.EELUStudentUnion.SelectionFragment.setupViewPager(SelectionFragment.java:59) 
                       at com.amir.ahmed.EELUStudentUnion.SelectionFragment.onActivityCreated(SelectionFragment.java:40) 
                       at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:2089) 
                       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1133) 
                       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290) 
                       at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801) 
                       at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1677) 
                       at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:536) 
                       at android.os.Handler.handleCallback(Handler.java:739) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:158) 
                       at android.app.ActivityThread.main(ActivityThread.java:7225) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

sekme düzeni parçası kod

olduğunun
@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    viewPager = (ViewPager) getActivity().findViewById(R.id.viewpager); 
    setupViewPager(viewPager); 

    viewPager.setOffscreenPageLimit(2); 

    tabLayout = (TabLayout) getActivity().findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(viewPager); 
    setupTabIcons(); 
} 



private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager()); 
    adapter.addFrag(new Courses(), "IT"); 
    adapter.addFrag(new CoursesBussiness(), "Business"); 
    viewPager.setAdapter(adapter); 
} 

cevap

18

Sizinle benzer bir sorunla karşılaştım, birkaç saatlik araştırmadan sonra sorunu buldum. ViewPager'ınız Parçanın içinde oluşturulmuşsa, getFragmentManager() yerine FragmentPagerAdapter için getChildFragmentManager() öğesini kullanmanız gerekir.

Böylece, setupViewPager() yönteminiz böyle görünmelidir.

private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager()); 
    adapter.addFrag(new Courses(), "IT"); 
    adapter.addFrag(new CoursesBussiness(), "Business"); 
    viewPager.setAdapter(adapter); 
} 

sorunun temel nedeni bu özel durum oluşturur, bu yüzden Fragment içeride sen gömülmüş fragmanlar olduğunu. Google'ın Docs göre

java.lang.IllegalStateException: FragmentManager is already executing transactions 

:

Artık parçaları içindeki parçaları gömebilirsiniz. Bu, dinamik ve yeniden kullanılabilir UI bileşenlerini kendi dinamik ve yeniden kullanılabilir bir UI bileşenine yerleştirmek istediğiniz çeşitli durumlar için kullanışlıdır. Örneğin, sola ve sağa kaydırmaya yarayan parçaları oluşturmak için ViewPager'ı kullanırsanız ve ekran alanının büyük kısmını tüketirseniz, artık parçalara her parçaya sayfa ekleyebilir. Bir parçayı iç içe geçirmek için , yalnızca FragmanFragmentManager() öğesinin, parçanın parça eklemek istediğiniz parçasını çağırmasını sağlayın. Bu, 'un normal olarak üst düzey etkinlikten yaptığınız gibi kullanabileceğiniz bir FragmentManager'ı döndürerek parça işlemleri oluşturur.

+0

Bro !!!!!! Sen bir dahi olduğunu biliyor musun? –

+1

Eylül 2016'dan itibaren bu sorunu yaşıyorum ve cevabınız çözmem için bana yardımcı oldu. Bir ton teşekkürler !! –

+0

Bu kabul edilmiş bir cevap olmalıdır – Rahul

İlgili konular