【发布时间】:2021-04-08 15:34:35
【问题描述】:
我的应用程序使用 BottomNavigationBar 在 Fragments 之间切换,它是这样做的:
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 是静态的,所以当我在它们之间切换时它们的内容和视图不会消失。我试图在MainActivity 的onCreate() 方法中创建它们,但它只有助于在EditText 小部件中保留文本,其余视图和内容消失。
我见过其他类似的问题,但他们的回答很差,我对此并不陌生。在对类似问题的一些回答之后,我尝试使用 add() 或 attach() 之类的函数而不是 replace() 但我认为我做得不好;事实上,有时我的应用会崩溃。
我也应该在这里粘贴我的 layout.xml 文件吗?这些片段被“显示”成一个简单的FrameLayout。 先谢谢 :)
【问题讨论】:
-
“所以当我在它们之间切换时它们的内容和视图不会消失”我不太明白,如果你在旧片段的位置放置一个新片段,旧片段会消失
-
您的代码很好,但我怀疑您想要实现的目标。你能分享更多信息吗?
-
@abhinavchauhan 我希望片段在视觉上消失,但不会破坏类并创建一个新的。
-
@rajendramahato
标签: java android android-studio android-fragments android-menu