[英]Android bottom navigation fragments issue
我在我的活動中使用帶有片段的底部導航。 每個導航項都有四個片段。 一切正常,除了片刻。 在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;
}
};
所以,當我旋轉手機和屏幕方向改變時,我總是得到第一個 Fragment(因為來自 onCreate 的第一段代碼)。
沒有它,我會在旋轉后得到正確的片段,但在第一次打開時屏幕將是空的。
如何在旋轉后獲得正確的片段並在活動開始時加載第一個片段?
Activity is recreated after each rotation by default.
您可以使用AndroidManifest中活動標簽的configChanges屬性覆蓋此行為。
android:configChanges="orientation|screenSize"
上述解決方案對我不起作用。
對我有用的是在加載默認片段之前檢查saveInstanceState是否為null。 這樣可以確保即使在旋轉時,如果saveInstanceState中存在屬於另一個片段的數據,默認情況下也不會默認顯示默認片段
即
if(savedInstanceState==null) {
//This is the function you call onCreate to load default fragment
loadFragments(new MyDefaultFragment());
}
只需檢查 bundle(OnsavedInstanceSate) 是否為空,然后顯示默認片段
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.