以编程方式刷新Android设计支持NavigationView

时间:2016-01-08 14:56:03

标签: android navigationview android-navigationview

所以,在我的主要活动中,我有一个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();
                }

0 个答案:

没有答案