我想让app NavigationView
在应用启动时检查一项。但我发现NavigationView.setCheckedItem(R.id.xxx)
无效。我也尝试了navigationView.getMenu().findItem(R.id.xxx).setChecked(true)
,结果相同。
我已经将checkableBehavior设置为单身。
<item android:title="@string/sliding_menu_group_places">
<menu>
<group android:checkableBehavior="single">
<item
android:id="@+id/xxx"
android:icon="@drawable/xxx"
android:title="@string/xxx" />
<item
android:id="@+id/xxx"
android:icon="@drawable/xxx"
android:title="@string/xxx" />
...
</group>
</menu>
</item>
但有一种方法可行:
drawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
}
@Override
public void onDrawerOpened(View drawerView) {
navigationView.setChecked(R.id.xxx);
}
@Override
public void onDrawerClosed(View drawerView) {
}
@Override
public void onDrawerStateChanged(int newState) {
}
});
将在onDrawerOpened回调中检查导航项。我在stackoverflow中搜索了很多,但没有一种方法适合我。谁可以帮我解决这个问题。
修改-1
<?xml version="1.0" encoding="utf-8"?>
<group android:checkableBehavior="single">
<item
android:id="@+id/xxx"
android:icon="@drawable/xxx"
android:title="@string/recent_display_name" />
<item android:title="@string/sliding_menu_group_places">
<menu>
<group android:checkableBehavior="single">
<item
android:id="@+id/xxx"
android:icon="@drawable/xxx"
android:title="@string/my_files_display_name" />
<item
android:id="@+id/nav_item_sdcard"
android:icon="@drawable/ic_nav_sdcard"
android:title="@string/storage_display_name" />
</group>
</menu>
</item>
<item android:title="@string/sliding_menu_group_tool">
<menu>
<group android:checkableBehavior="single">
<item
android:id="@+id/xxx"
android:icon="@drawable/xxx"
android:title="@string/clean_display_name" />
</group>
</menu>
</item>
<item android:title="@string/sliding_menu_group_settings">
<menu>
<group android:checkableBehavior="single">
<item
android:id="@+id/xxx"
android:icon="@drawable/xxx"
android:title="@string/settings_display_name" />
<item
android:id="@+id/xxx"
android:icon="@drawable/xxx"
android:title="@string/exit_display_name" />
</group>
</menu>
</item>
</group>
答案 0 :(得分:4)
感谢@darwin。
<强>原因:强>
navigationView.setCheckedItem(R.id.xxx)
无效,因为NavigationView
尚未准备就绪。
<强>解决方案:强>
navigationView.post(new Runnable() {
@Override
public void run() {
navigationView.setCheckedItem(id);
}
});
答案 1 :(得分:1)
菜单项必须是可检查的。
<item android:title="@string/sliding_menu_group_places">
<menu>
<group> <!-- removed behavior -->
<item
android:id="@+id/xxx"
android:icon="@drawable/xxx"
android:title="@string/xxx"
android:checkable="true" /> <!-- added 'checkable' -->
<item
android:id="@+id/xxx"
android:icon="@drawable/xxx"
android:title="@string/xxx"
android:checkable="true" /> <!-- added 'checkable' -->
...
</group>
</menu>
</item>
答案 2 :(得分:0)
尝试这种方式:
menuItem.setCheckable(true);
menuItem.setChecked(true);
if (mPreviousMenuItem != null && mPreviousMenuItem != menuItem) {
mPreviousMenuItem.setChecked(false);
}
mPreviousMenuItem = menuItem;
答案 3 :(得分:0)
下面的代码打开NavigationView的第一个片段并在NavigationView上检查它。对于 savedInstancesState == null 条件的含义:https://stackoverflow.com/a/26855936/4606368
if (savedInstanceState == null) {
Fragment fragment = new EventsUpcoming();
getSupportFragmentManager().beginTransaction().replace(R.id.frame_container, fragment, "Upcoming").commit();
navigationView.setCheckedItem(R.id.nav_eventupcoming);
toolbar.setTitle(R.string.events_upcoming);
}
在活动的OnCreate方法中添加此代码。
答案 4 :(得分:0)
尝试使用itemChecked
的这一行代码是所选菜单的索引
navigationView.getMenu().getItem(itemChecked).setChecked(true);
答案 5 :(得分:-1)
使用项目的setChecked
方法代替navigationView
navigationView.post(new Runnable() {
@Override
public void run() {
navigationView.getMenu().getItem(0).setChecked(true);
}
});