获取已加载视图的子视图(抽屉内的组)

时间:2017-12-23 19:31:50

标签: android

我有一个包含组中操作的抽屉,提交了我想要动态放入另一个组的文件列表。我的主要活动有这样的布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer"/>
</android.support.v4.widget.DrawerLayout>

然后加载的NavigationView是:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/test_id">
    <group android:checkableBehavior="single" android:id="@+id/group_file_list">
        <item
            android:id="@+id/file1"
            android:icon="@drawable/ic_menu_gallery"
            android:title="File 1"/>
        ...
    </group>

    <item android:title="Actions">
        <menu>
            <item
                android:id="@+id/nav_share"
                android:icon="@drawable/ic_menu_share"
                android:title="Share"/>
            <item
                android:id="@+id/nav_send"
                android:icon="@drawable/ic_menu_send"
                android:title="Send"/>
        </menu>
    </item>
</menu>

当我尝试获取文件所在的组以后动态添加Items时,所有这些都返回null:

findViewById(R.id.group_file_list); // returns null

View navView = findViewById(R.id.nav_view); // works
navView.findViewById(R.id.group_file_list); // returns null
navView.findViewById(R.id.test_id); // returns null

是的,我在setContentView()之后调用了这个。我也试过onStart()

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

这些是菜单项而不是视图。您可以使用选项菜单

获取它们
Menu optionsMenu;

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
       getMenuInflater().inflate(R.menu.main, menu);
       //  store the menu to var when creating options menu
       optionsMenu = menu;
    }

然后你可以找到你想要的项目

MenuItem item = optionsMenu.findItem(R.id.test_id);

答案 1 :(得分:0)

使用此功能将项目添加到抽屉:

NavigationView navView = findViewById(R.id.nav_view);
navView.getMenu().add(...);

或者,要添加到组,请执行以下操作:

navView.getMenu().addSubMenu(Menu.NONE, Menu.NONE, Menu.NONE, groupName).add(...);

请参阅NavigationViewMenu