1

因此,在我的主要活动中,我设置了一个 NavigationView,其中总共包括两个子菜单,一个名为“我的项目”,另一个名为“共享项目”。我设置了它,以便在创建活动时,它从我的服务器获取项目并以这种方式将其添加到抽屉中:

    Menu menu = navigationView.getMenu();
    Menu myProjects = menu.findItem(R.id.myProjects).getSubMenu();
    Menu sharedProjects = menu.findItem(R.id.sharedProjects).getSubMenu();

    for (int i = 0; i < myProjectList.size(); i++) {
        myProjects.add(myProjectList.get(i).getTitle()).setIcon(R.drawable.ic_keyboard_arrow_right_black_24dp);
    }

    for (int i=0; i<sharedProjectList.size(); i++) {
        sharedProjects.add(sharedProjectList.get(i).getTitle()).setIcon(R.drawable.ic_keyboard_arrow_right_black_24dp);
    }

    MenuItem mi = menu.getItem(menu.size() - 1);
    mi.setTitle(mi.getTitle());

这工作得很好,并给了我我正在寻找的输出。但是,我想将此功能扩展到一个点,即如果用户在应用程序中创建一个新项目,它应该在抽屉中更新它,而无需重新启动整个活动。android 开发人员文档没有突出显示任何方法,例如 notifyDataSetChanged() 或允许刷新视图的排序。

至于我的数据,它被组织在两个arrayLists中,myProjectList和sharedProjectList。该列表由项目对象组成,这些项目对象在整个活动期间可公开访问,并随着用户所做的任何更改而异步更新。

EDIT2:已解决似乎有人在此问题上发布了类似的答案:

如何在 Google 的新 NavigationView 中将 MenuItem 添加到 SubMenu?

将此添加到 onResume 并更新我的原始列表非常有效:

final View child = navigationView.getChildAt(0);
                if (child != null && child instanceof ListView) {
                    final ListView menuView = (ListView) child;
                    final HeaderViewListAdapter adapter = (HeaderViewListAdapter) menuView.getAdapter();
                    final BaseAdapter wrapped = (BaseAdapter) adapter.getWrappedAdapter();
                    wrapped.notifyDataSetChanged();
                }
4

0 回答 0