导航抽屉:如何知道当前选中的项目?
Navigation drawer: How to know the current selected item?
有一个左抽屉和一个片段,当 selected 导航抽屉中的项目时,该片段会发生变化。问题是,如果 "Item A" 已经被 select 编辑,并且用户再次 select 它,则片段将更改为同一片段。
为了防止这种行为,我需要知道哪个项目已经 selected。我使用的是属性 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;
}
}
}
我想这会对你有所帮助。
private class SlideMenuClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// display view for selected nav drawer item
displayView(position);
Toast.makeText(getApplicationContext(),"You have selected " +position,Toast.LENGTH_LONG).show();
}
}
我做完全相同的事情,有一个 int
变量保存选定的位置。
要记住的一件事是在 InstaceChange 上保存这个变量,因为如果你不这样做,你的抽屉可能已经过时了。
所以,话虽如此,一些代码:
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);
}
类似的东西!
有一个左抽屉和一个片段,当 selected 导航抽屉中的项目时,该片段会发生变化。问题是,如果 "Item A" 已经被 select 编辑,并且用户再次 select 它,则片段将更改为同一片段。
为了防止这种行为,我需要知道哪个项目已经 selected。我使用的是属性 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;
}
}
}
我想这会对你有所帮助。
private class SlideMenuClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// display view for selected nav drawer item
displayView(position);
Toast.makeText(getApplicationContext(),"You have selected " +position,Toast.LENGTH_LONG).show();
}
}
我做完全相同的事情,有一个 int
变量保存选定的位置。
要记住的一件事是在 InstaceChange 上保存这个变量,因为如果你不这样做,你的抽屉可能已经过时了。
所以,话虽如此,一些代码:
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);
}
类似的东西!