hel*_*sim 1 android android-support-library material-design
当选择导航抽屉中的项目时,左抽屉和片段会发生变化.问题是,如果已经选择了"项目A",并且用户再次选择它,则对于相同的片段更改片段.
为防止出现这种情况,我需要知道哪个项目已被选中.我使用的是属性mLastSelectedItemPosition,但我不认为这是一个很好的解决方案.有没有办法从导航抽屉中获取当前检查的项目?
class OnNavigationItemSelectedListener implements NavigationView.OnNavigationItemSelectedListener {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
if (mLastSelectedItemPosition != menuItem.getOrder()) {
// Is not the same item, so I can change the fragment.
mLastSelectedItemPosition = menuItem.getOrder();
}
mDrawerLayout.closeDrawers();
return true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我做同样的事情,有一个int变量保持选定的位置.有一点要记住的是保存这个变量onInstaceChange,因为如果你不`吨,你可能会与你的抽屉掉过期.所以,有了这个说,一些代码:
private static final String MENU_ITEM = "menu_item";
private int menuItemId;
...
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem item) {
if (menuItemId == item.getItemId()) {
drawerLayout.closeDrawer(navigationView);
return false;
switch (item.getItemId()) {
....
}
...
drawerLayout.closeDrawer(navigationView);
item.setChecked(true);
menuItemId = item.getItemId();
return true;
}
});
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(MENU_ITEM, menuItemId);
}
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
this.menuItemId = savedInstanceState.getInt(MENU_ITEM);
}
Run Code Online (Sandbox Code Playgroud)
这样的东西!
| 归档时间: |
|
| 查看次数: |
2612 次 |
| 最近记录: |