如何在不破坏和重新创建片段的情况下在片段之间切换? 以类似静态的方式

问题描述

我的应用程序使用 BottomNavigationBar 在 Fragment 之间切换,它是这样做的:

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        BottomNavigationView bottomNav = findViewById(R.id.barra);
        bottomNav.setOnNavigationItemSelectedListener(navListener);

        getSupportFragmentManager().beginTransaction().replace(R.id.container,new KeyboardFragment()).commit();
        bottomNav.setSelectedItemId(R.id.keyboard);

    }


    private BottomNavigationView.OnNavigationItemSelectedListener navListener =
            new BottomNavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                    Fragment selectedFragment = null;

                    switch (item.getItemId()){
                        case R.id.camera:
                            selectedFragment = new CameraFragment();
                            break;
                        case R.id.keyboard:
                            selectedFragment = new KeyboardFragment();
                            break;
                        case R.id.settings:
                            selectedFragment = new SettingsFragment();
                            break;
                    }

                    getSupportFragmentManager().beginTransaction().replace(R.id.container,selectedFragment).commit();

                    return true;

                }
            };
}

我希望那些 Fragments 是静态的,所以当我在它们之间切换时,它们的内容和视图不会消失。我尝试在 MainActivityonCreate() 方法中创建它们,但它仅有助于将文本保留在 EditText 小部件中,其余的视图和内容都消失了。

我看过其他类似的问题,但他们的回答很差,我对此很陌生。根据类似问题的一些答案,我尝试使用 add()attach() 之类的函数代替 replace(),但我认为我做得不好;事实上,有时我的应用会崩溃。

我也应该在这里粘贴我的 layout.xml 文件吗?这些片段被“显示”成一个简单的 FrameLayout先谢谢:)

解决方法

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

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

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