我在我的活动中使用带有片段的底部导航。每个导航项我有四个片段。除了片刻之外,一切都很好。在onCreate
中,我使用此代码在创建活动时加载第一个片段:
//Manually displaying the first fragment - one time only
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.frame_layout, MyCoursesFragment.newInstance("",""));
transaction.commit();
我的BottomNavigationListener是:
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment selectedFragment = null;
switch (item.getItemId()) {
case R.id.navigation_home:
selectedFragment = MyCoursesFragment.newInstance("","");
break;
case R.id.navigation_dashboard:
selectedFragment = CatalogFragment.newInstance("","");
break;
case R.id.navigation_notifications:
selectedFragment = MessagesFragment.newInstance("","");
break;
case R.id.my_people:
selectedFragment = MyPeopleFragment.newInstance("","");
break;
}
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.frame_layout, selectedFragment);
transaction.commit();
return true;
}
};
所以,当我旋转手机和屏幕方向改变时,我总是得到第一个片段(因为onCreate的第一段代码)。
没有它,我会在旋转后获得正确的片段,但在第一次打开时,屏幕将为空。
如何在旋转后获得正确的片段,并在活动开始时加载第一个片段?
答案 0 :(得分:2)
Activity is recreated after each rotation by default.
您可以使用的configChanges属性覆盖此行为 AndroidManifest中的活动标记。
android:configChanges="orientation|screenSize"
答案 1 :(得分:0)
上述解决方案对我不起作用。
对我有用的是在加载默认片段之前检查 savedInstanceState 是否为空。
这样可以确保即使在旋转时,如果 savedInstanceState
即
if(savedInstanceState==null) {
//This is the function you call onCreate to load default fragment
loadFragments(new MyDefaultFragment());
}
答案 2 :(得分:0)
只检查 bundle(OnsavedInstanceSate) 是否为空,然后显示默认片段