答えて

5

残念ながら、BottomNavigationViewにはこの段階では、plentyの機能がありません。

あなたの質問は本当に興味深いものでした。私はこれを書きましたBottomNavigationView状態を保存し、あなたの場合は最後に選択したアイテムを保存します。ここで

gist to the code

です。この拡張機能は含まれています:

  • はプログラム的に選択した項目を設定し、取得するための公共の2方法を提供します。
  • 最後の選択時にのみ状態を保存および復元します。

ASLがfix thisになるまで待ちます。

+0

チェックしたい項目を設定してみませんか?あなたが投稿した最後のリンク(https://code.google.com/p/android/issues/detail?id = 225900&q = BottomNavigationView&colspec = ID%20Status%20Priority%20Owner%20Summary%20Stars%20Reporter%20Opened) bottomNavigationView.getMenu()。findItem(selectedItem).setChecked(true); –

1

ニコラと同意してください!

私はあなたActivityに追加する必要が回転した後の状態を保存するには、私自身gistすぎ

を作成しました:

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    outState.putInt("opened_fragment", bottomNavigation.getCurrentItem()); 
    super.onSaveInstanceState(outState); 
} 

onCreate方法に、ちょうどBottomNavigationViewを設定した後:

final defaultPosition = 0; 
final int bottomNavigationPosition = savedInstanceState == null ? defaultPosition : 
      savedInstanceState.getInt("opened_fragment", defaultPosition); 

bottomNavigation.setCurrentItem(bottomNavigationPosition); 

この要点の最大のプラスは次のとおりです。リスナーはほとんどありません。以前の選択肢を示しています。プログラムによって位置が設定されている場合でも、イオンとリスナーは反応します。すべてがリンクで書かれており、必要に応じて使います。

+1

位置がビューの対象と見なされる場合は、そのビューをビューの実装内に保存する必要があります。したがって、 'Activity'クラスに行くよりも、ビューの適切な保存と復元の状態メソッドに保存するのが一般的です。 –

2

私はBottomNavigationViewで作業しています。ここでは、アプリケーションが画面回転で正しく動作するコードを示します。 まず、私が選択したメニュー
private int saveState;

値を取り出すのonCreate方法で、変数

@Override 
    protected void onResume() { 
     super.onResume(); 
     navigation.setSelectedItemId(saveState); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { 
     super.onSaveInstanceState(outState, outPersistentState); 
     saveState = navigation.getSelectedItemId(); 
    } 

に選択されたメニューIDを取ることにより、IDの値を保存するIDを保持する変数を作成しましたIDを利用できる

 if(savedInstanceState!=null){ 
      navigation.setSelectedItemId(saveState); 
     }else{ 
      FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
      transaction.replace(R.id.content, MapFragment.newInstance()); 
      transaction.commit(); 
     } 
0

場合、私は同じ問題を抱えて、何私がやったことは2から更新するようにしました。 5.0.125.3.1となり、追加のコードなしで正しく動作するようになりました。 Support Library Revision websiteの最新バージョンを確認できます。

私はそれが役に立ちそうです。

関連する問題