2017-09-28 7 views
0

私は、自分のアクティビティでフラグメントを含むボトムナビゲーションを使用しています。私は、各ナビゲーションアイテムに対して4つのフラグメントを持っています。一瞬を除いて、すべてうまく動作します。アクティビティを作成するときonCreateでは、私は最初のフラグメントをロードするために、このコードを使用します。Android下部のナビゲーションフラグメントの問題

//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からの最初のコードのため)。

回転せずに右のフラグメントを取得しますが、最初のオープンでは画面が空になります。

ローテーション後に正しいフラグメントを取得する方法と、アクティビティの開始時に最初のフラグメントを読み込む方法はありますか?

答えて

1
Activity is recreated after each rotation by default. 

あなたはAndroidManifestで アクティビティタグのconfigChanges属性でこの動作をオーバーライドすることができます。

android:configChanges="orientation|screenSize" 

Handling Configuration Changes