我在最近的一个项目中使用了新的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()
你有解决方案吗?谢谢你的帮助。
答案 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(),但菜单没有更新!