为什么 replace() 方法保存 Fragment 的状态?

问题描述

我有一个 BottomNavigationView 可以在 4 Fragments 之间导航,第一个RecyclerView。当我选择 BottomNavigationView一个项目时,我使用 replace() 方法Fragments 之间切换。我不明白的是为什么当我滚动 RecyclerView 时,转到另一个 Fragment 并返回带有 FragmentRecyclerView,滚动位置保持与我离开 Fragment 时相同,而不是回到 RecyclerView 的顶部。由于我使用的是 replace() 并且没有添加后台堆栈中,因此片段不应该被重置吗?这是我的代码

private void initializefragments() {

    homeFragment = new HomeFragment();
    FeedFragment = new FeedFragment();
    chatFragment = new ChatFragment();
    profileFragment = new ProfileFragment();

    fragmentManager = getSupportFragmentManager();

    fragmentManager.beginTransaction()
            .replace(R.id.fragment_container,homeFragment,"home")
            .commit();

}

private void setupBottomNavigation() {


        bottomNavigationView.setonNavigationItemSelectedListener(item -> {

            FragmentTransaction ft = fragmentManager.beginTransaction();

            if (item.getItemId() == R.id.bottom_nav_home) {
                ft.replace(R.id.fragment_container,"home")
                        .commit();


            } else if (item.getItemId() == R.id.bottom_nav_Feed) {
                ft.replace(R.id.fragment_container,FeedFragment,"Feed")
                        .commit();


            } else if (item.getItemId() == R.id.bottom_nav_chat) {
                ft.replace(R.id.fragment_container,chatFragment,"chat")
                        .commit();


            } else if (item.getItemId() == R.id.bottom_nav_profile) {
                ft.replace(R.id.fragment_container,profileFragment,"profile")
                        .commit();

            }

            return true;
        });

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)