因此,在我的主要活动中,我设置了一个 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();
}