5

デザイン ライブラリから BottomNavigationView を使用しようとしています。各ナビゲーション項目がアクティビティを開始することを除いて、すべてが機能しているため、ナビゲーション内のすべての項目のチェックを外して、同じように見せたいと考えています。私はいくつかの解決策を試しましたが、そのほとんどは機能しません。最後の解決策は機能しますが、非常にハッキリしています。

最初に私はこれをしました:

ViewGroup nav = (ViewGroup) bottomNav;
for(int i=0; i < nav.getChildCount(); i++) {
    nav.getChildAt(i).setSelected(false);
}

これは何もしないようでした。

それから私は試しました:

int size = bottomNav.getMenu().size();
for (int i = 0; i < size; i++) {
    bottomNav.getMenu().getItem(i).setChecked(false);
}

最初のアイテムではなく、最後のアイテムのみがチェックされました。

そして最後に、ダミー項目をメニューに追加して実行してみました:

bottomNav.getMenu().findItem(R.id.dummmy_item).setChecked(true);
bottomNav.findViewById(R.id.dummmy_item).setVisibility(View.GONE);

これはほとんど機能しますが、私の場合はコンテキストにとって重要なタイトルが隠されています。

それから私はこの答えを見つけました: https://stackoverflow.com/a/41372325/4888701そしてそれを含むように上記のソリューションを編集しました。具体的には、proguard ルールを追加し、その正確なヘルパー クラスを使用してメソッドを呼び出しました。それは正しいように見えます、うまくいくようです。しかし、次の理由から、私には非常にハックに感じます。

  1. ダミーのメニュー項目を使用して、目に見える項目をチェックできないようにしています
  2. 小さな視覚的な修正を行うために、かなりの量のコードが追加されます。
  3. 私は以前、可能であれば反省を避けるべきだと読んだことがあります。

これを達成するための他の、できればより簡単な方法はありますか、それとも現在のバージョンのライブラリでこれが最善ですか?

(補足として、このソリューションの proguard ルールが必要かどうか、またそれが何をするのか疑問に思っています。proguard については何も知りませんが、このプロジェクトはそれを有効にした他の誰かから継承されています。)

4

5 に答える 5