如何在新的NavigationView中使用notifyDataSetChanged?

时间:2015-06-16 09:31:00

标签: android material-design android-design-library navigationview

我在最近的一个项目中使用了新的class myCV: UICollectionView { required init(coder decoder: NSCoder) { super.init(coder: decoder) self.layer.cornerRadius = 5.0 self.layer.borderWidth = 1.0 self.layer.borderColor = UIColor.lightGrayColor().CGColor } } 。但是我对更新数据有疑问。

以前,我在NavigationView中使用ListView,当我需要更改数据时,我调用了适配器的DrawerLayout方法。

目前notifyDataSetChanged()没有NavigationView方法,当我想要更新菜单上的项目时,没有任何事情发生,例如:

notifyDataSetChanged()

你有解决方案吗?谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

UPDATE:这已在v23.0.0中修复,因此您无需自行执行任何操作,只需更新您的依赖项即可。得到了这个答案:https://stackoverflow.com/a/32181083/2489474

旧解决方案(只是为了看看它有多愚蠢):

但我在这个答案中找到了有效的解决方案https://stackoverflow.com/a/30604299/2489474。它使用反射来调用NavigationView的演示者的updateMenuView(boolean)。

为了我的目的,我已经从答案中修改了代码。从答案中检查一个方法,并选择哪一个更适合你。

//HACK
private void updateNavigationView() {
    try {
        Field presenterField = NavigationView.class.getDeclaredField("mPresenter");
        presenterField.setAccessible(true);
        ((NavigationMenuPresenter) presenterField.get(navigationView_)).updateMenuView(false);
    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
}

P.S。有趣的是updateMenuView忽略了给它的值。

答案 1 :(得分:1)

而不是引用群组,然后从该群组中找到项目并设置其可见性尝试直接引用该项目 ......

var http = require('https');

它对我有用。我希望它可以帮助你。

答案 2 :(得分:1)

@Moinkhan感谢您的帮助,但对我不起作用。这是我的menu_drawer.xml

<group
    android:checkableBehavior="single"
    android:id="@+id/group1">

    <item
        android:id="@+id/drawer_item_publications_list"
        android:icon="@drawable/ic_drawer_publications_24dp"
        android:title="@string/drawer_menu_item_publications" />
</group>

<group android:id="@+id/drawer_group_account">

    <item
        android:title="@string/drawer_menu_sub_item_account"
        android:id="@+id/drawer_item_account">

        <menu>
            <item
                android:icon="@drawable/ic_drawer_login_24dp"
                android:id="@+id/drawer_item_login"
                android:title="@string/drawer_menu_item_login" />

            <group
                android:id="@+id/group_actions_user">

                <item
                    android:icon="@drawable/ic_drawer_add_publication_24dp"
                    android:id="@+id/drawer_item_add_publication"
                    android:title="@string/drawer_menu_item_add_publication" />

                <item
                    android:icon="@drawable/ic_drawer_my_publications_24dp"
                    android:id="@+id/drawer_item_my_publications"
                    android:title="@string/drawer_menu_item_my_publications" />

                <item
                    android:icon="@drawable/ic_drawer_edit_profil_24dp"
                    android:id="@+id/drawer_item_edit_profil"
                    android:title="@string/drawer_menu_item_edit_profil" />

                <item
                    android:icon="@drawable/ic_drawer_delete_account_24dp"
                    android:id="@+id/drawer_item_delete_account"
                    android:title="@string/drawer_menu_item_delete_account" />

                <item
                    android:icon="@drawable/ic_drawer_logout_24dp"
                    android:id="@+id/drawer_item_logout"
                    android:title="@string/drawer_menu_item_logout" />

            </group>

        </menu>
    </item>
</group>

我的方法来更新我的NavigationView

private void setUpNavigationDrawer()
{
    boolean isLoggedIn = sessionManager.isLoggedIn();

    navigationView.getMenu().findItem(R.id.drawer_item_account).getSubMenu().findItem(R.id.drawer_item_login).setVisible(!isLoggedIn);
    navigationView.getMenu().findItem(R.id.drawer_item_account).getSubMenu().setGroupVisible(R.id.group_actions_user, isLoggedIn);
}

经过一些操作后,我调用了setUpNavigationDrawer(),但菜单没有更新!