FragmentManager 已经在执行事务 viewpager2

Nia*_*gor 2 android fragmentmanager android-viewpager2

我在视图寻呼机 2 中使用 4 个片段。突然出现此错误。崩溃并不总是出现。我搜索了其他问题,但找不到有关 viewpager2 的任何解决方案。

来自手机的崩溃报告无法获得全貌

setUpViewPager()从调用这个在onStart()MainActivity

public void setupViewPager() {
        MainActivityViewPager adapter = new MainActivityViewPager(getSupportFragmentManager(), getLifecycle());

        binding.viewpager.setUserInputEnabled(false);

        binding.viewpager.setOffscreenPageLimit(3);

        binding.viewpager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageSelected(int position) {
                if (prevMenuItem != null) {
                    prevMenuItem.setChecked(false);
                } else {
                    binding.bottomNavigation.getMenu().getItem(0).setChecked(false);
                }
                binding.bottomNavigation.getMenu().getItem(position).setChecked(true);
                prevMenuItem = binding.bottomNavigation.getMenu().getItem(position);
            }
        });

        binding.viewpager.setAdapter(adapter);
    }

Run Code Online (Sandbox Code Playgroud)

主ActivityViewPager


public class MainActivityViewPager extends FragmentStateAdapter {


    public MainActivityViewPager(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
        super(fragmentManager, lifecycle);
    }

    @NonNull
    @Override
    public Fragment createFragment(int position) {
        switch (position) {
            case 0:
                return new HomeFragment();
            case 1:
                return new ProgressFragment();
            case 2:
                return new MoreFragment();
            case 3:
                return new ProfileFragment();
        }
        return null;
    }

    @Override
    public int getItemCount() {
        return 4;
    }

Run Code Online (Sandbox Code Playgroud)

谁能建议我一个解决方案?这目前正在生产应用程序中发生,我的头上有红色警报。谢谢你们

sna*_*msm 5

基于日志你ViewPager被放在里面 (nested?) Fragment,所以你应该使用getChildFragmentManager而不是getSupportFragmentManager