web-dev-qa-db-ja.com

プログラムで下部ナビゲーションビューメニューを展開する

Bottom Navigation Viewがバージョン25の設計サポートライブラリに追加されました。試しましたが、今ははるかに使いやすくなっています。

しかし、私は私のアプリの要件に従ってそれを実装する問題に直面しています。メニューリソースを動的に膨らませ、ボトムナビゲーションビューのメニュー項目/タイトルをプログラムで変更したい。

inflateMenu(int menuResource)—メニューリソース識別子を使用して、下部ナビゲーションビューのメニューを拡張します。

ドキュメントによると:

inflateMenu:void inflateMenu(int resId)メニューリソースをこのナビゲーションビューに拡張します。 メニューの既存の項目は変更または削除されません。パラメータresId int:膨らませるメニューリソースのID。

プログラムでナビゲーションビューを使用してこのinflateMenu(int resID)メソッドを使用しようとすると、例外 "Resource not found"がスローされる

bottomNavigationView.inflateMenu(R.menu.bottom_navigation_menu);

サードパーティのライブラリなしでそれを達成することは可能ですか?

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    xmlns:app="http://schemas.Android.com/apk/res-auto">

    <FrameLayout
        Android:id="@+id/main_fragment_container"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_above="@+id/bottom_navigation" />

    <Android.support.design.widget.BottomNavigationView
        Android:id="@+id/bottom_navigation"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true"
        app:itemBackground="@color/theme_action_bar_bg"
        app:itemIconTint="@color/white"
        app:itemTextColor="@color/white" />
</RelativeLayout>

メニューリソース:

 <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto">
    <item
        Android:id="@+id/nav_bar_item_dashboard"
        Android:enabled="true"
        Android:icon="@drawable/ic_nav_bar_dashboard_24px"
        Android:title="@string/nav_bar_item_dashboard"
        app:showAsAction="ifRoom" />
    <item
        Android:id="@+id/nav_bar_item_people"
        Android:enabled="true"
        Android:icon="@drawable/ic_nav_bar_people_24px"
        Android:title="@string/nav_bar_item_people"
        app:showAsAction="ifRoom" />
    <item
        Android:id="@+id/nav_bar_item_classroom"
        Android:enabled="true"
        Android:icon="@drawable/ic_nav_bar_classroom_24px"
        Android:title="@string/nav_bar_item_classrooms"
        app:showAsAction="ifRoom" />

    <item
        Android:id="@+id/nav_bar_item_manage"
        Android:enabled="true"
        Android:icon="@drawable/ic_nav_bar_manage_24px"
        Android:title="@string/nav_bar_item_manage"
        app:showAsAction="ifRoom" />

    <item
        Android:id="@+id/nav_bar_item_more"
        Android:enabled="true"
        Android:icon="@drawable/ic_nav_bar_more_24px"
        Android:title="@string/nav_bar_item_more"
        app:showAsAction="ifRoom" />
</menu>

アクティビティ内の下部ナビゲーションビューのメニューリソースでプログラムによってインフレートします。

navBar = (BottomNavigationView) findViewById(R.id.bottom_navigation);
    navBar.inflateMenu(R.menu.bottom_navigation_view);
10
Priya Mall
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);

//Add MenuItem with icon to Menu
navigation.getMenu().add(Menu.NONE, 1, Menu.NONE, "Home").setIcon(R.drawable.ic_home_black_24dp);

それが役に立てば幸い。

18
imagdic
navigationView.getMenu().clear(); //clear old inflated items.
navigationView.inflateMenu(R.menu.new_navigation_drawer_items);

から この答え

9
tabebqena