所以,在我的主要活动中,我有一个NavigationView设置,其中包括总共两个子菜单,一个标题为" My Projects"另一个标题是“共享项目”。#34;我设置它,以便在创建活动时,它从我的服务器获取项目并以这种方式将其添加到抽屉:
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()或允许刷新视图的排序。
至于我的数据,它由两个数组列表组成,myProjectList和sharedProjectList。 List由项目对象组成,这些项目对象可以在整个活动中公开访问,并且可以通过用户所做的任何更改进行异步更新。
EDIT2:已解决似乎有人在此问题上发布了类似的答案:
How to add MenuItem to SubMenu in Google's new NavigationView?
将此添加到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();
}