每次我在使用导航组件实现的 BottomNavigationView 中切换它们时,片段都会重新启动

Fragments restart everytime I switch between them inside BottomNavigationView implemented using Navigation component

所以我使用导航组件实现了底部导航,每次我在这些片段之间切换时,片段都会重新启动而不是重新加载以前的状态。导航组件应该自己处理这些情况吗?我在下面附上我的主要 activity 的 oncreate 方法代码。如有任何帮助,我们将不胜感激!

protected void onCreate(Bundle savedInstanceState) {
    getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
    getWindow().setExitTransition(new Fade());

    super.onCreate(savedInstanceState);


    binding = ActivityMainBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());

    iv = binding.logoAppbar;
    toolbar = binding.toolbarMain;
    appBarLayout = binding.appbarMain;
    navViewBottom = binding.navViewBottom;

    NavHostFragment navHostFragment =
            (NavHostFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.nav_host_fragment_activity_main);
    navController = navHostFragment.getNavController();

    setSupportActionBar(toolbar);


    AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
            R.id.homeFragment, R.id.listingsFragment, R.id.featuredFragment, R.id.categoriesFragment
            , R.id.accountFragment, R.id.howItWorksFragment, R.id.aboutUsFragment, R.id.sellingFeesFragment
            , R.id.primeMembershipFragment)
            .setOpenableLayout(drawerLayout)
            .build();


     NavigationUI.setupWithNavController(toolbar,navController,appBarConfiguration);
     NavigationUI.setupWithNavController(navViewBottom,navController);

    Objects.requireNonNull(getSupportActionBar()).setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_nav_menu_icon);

}

这是我的 Home Fragment 代码,它在 SwipeRefreshLayout 内的协调器布局中有一个回收视图

 @Override
public void onCreate(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */) {
        @Override
        public void handleOnBackPressed() {
            // Handle the back button event
            getActivity().finish();
        }
    };

    requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
}

public View onCreateView(@NonNull LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {

    if (view == null) {

        binding = FragmentHomeBinding.inflate(inflater, container, false);
        view = binding.getRoot();
        recyclerView = binding.recyclerViewHome;
        shimmerFrameLayout = binding.shimmerLayoutHome;
        appBarLayout = binding.appbarHome;
        collapsingToolbarLayout = binding.collapsingToolbarHome;
        swipeRefreshLayoutHome = binding.swipeRefreshLayoutHome;


        recyclerView.setVisibility(View.GONE);
        shimmerFrameLayout.setVisibility(View.VISIBLE);
        shimmerFrameLayout.startShimmer();
        listings = new ArrayList<>();

        manager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);

        recyclerView.setItemViewCacheSize(20);


        Retrofit retrofit = new Retrofit.Builder().baseUrl(getString(R.string.BASE_URL))
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        farmTenderApi = retrofit.create(API.class);

        HomeRecyclerViewAdapter adapter = new HomeRecyclerViewAdapter(getContext(), listings);
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(manager);
        getFirstPage(pageNo, 10);

        AppBarLayout.OnOffsetChangedListener mListener = new AppBarLayout.OnOffsetChangedListener() {
            @Override
            public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
                swipeRefreshLayoutHome.setEnabled(verticalOffset == 0);
            }
        };

        appBarLayout.addOnOffsetChangedListener(mListener);

        //swipe down to refresh
        swipeRefreshLayoutHome.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                shimmerFrameLayout.startShimmer();
                shimmerFrameLayout.setVisibility(View.VISIBLE);
                recyclerView.setVisibility(View.GONE);
                pageNo = 1;
                listings.clear();
                getFirstPage(1, 10);
            }
        });

        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(@NonNull @NotNull RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);

                if (newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
                    isScrolling = true;
                }
            }

            @Override
            public void onScrolled(@NonNull @NotNull RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                currentItems = manager.getChildCount();
                totalItems = manager.getItemCount();
                scrolledOutItems = manager.findFirstVisibleItemPosition();

                if (isScrolling && (currentItems + scrolledOutItems >= totalItems)) {
                    pageNo++;
                    isScrolling = false;
                    isLoading = true;
                    performPagination(pageNo, 10);

                }
            }
        });

    }
   return view;
}

看来将我的依赖版本改成v2.4.0-alpha05已经解决了娱乐问题,感谢大家的帮助...