Android - 获取在子菜单中单击的 MenuItem 的项目 ID
Android - get item id of a MenuItem clicked in a Submenu
我正在用 ArrayList
个城市填充子菜单。我似乎无法弄清楚如何获取在子菜单中单击的 MenuItem
的 ID。我找不到适合我需要的方法。
让我与您分享我的代码。任何帮助将不胜感激。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
mToolbar.setTitleTextAppearance(this, R.style.TextAppearance_Widget_Event_Toolbar_Title);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerToggle = new ActionBarDrawerToggle(
this, mDrawerLayout, mToolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerToggle.syncState();
mFrameLayout = (FrameLayout) findViewById(R.id.content_frame);
NavigationView navigationView = (NavigationView)findViewById(R.id.nav_view);
mDrawerMenu = navigationView.getMenu();
addCitiestoMenu();
navigationView.setNavigationItemSelectedListener(this);
}
子菜单添加城市的方法
private void addCitiestoMenu() {
cityArrayList = RealmHelper.getStoredCities();
SubMenu submenu = mDrawerMenu.getItem(0).getSubMenu();
submenu.setIcon(R.drawable.ic_place_black_24dp);
submenu.setHeaderTitle("test");
int i = 0;
for (City city: cityArrayList) {
submenu.add(city.getCityName());
submenu.getItem(i).setIcon(R.drawable.ic_place_black_24dp);
i++;
}
}
onNavigationItemSelected 方法获取点击子菜单的id
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
Log.v(LOG_TAG, "id: "+id);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
您必须在菜单项上设置一个 ID。设置 id 只能使用 Menu
的 add
方法之一,例如Menu.add()
。更改您的 addCitiestoMenu()
:
private void addCitiestoMenu() {
cityArrayList = RealmHelper.getStoredCities();
SubMenu submenu = mDrawerMenu.getItem(0).getSubMenu();
submenu.setIcon(R.drawable.ic_place_black_24dp);
submenu.setHeaderTitle("test");
for (City city : cityArrayList) {
int cityId = city.getId(); // Get the id (You'll probably need to replace getId() )
MenuItem item = submenu.add(Menu.NONE, cityId, Menu.NONE, city.getCityName());
item.setIcon(R.drawable.ic_place_black_24dp);
}
}
我正在用 ArrayList
个城市填充子菜单。我似乎无法弄清楚如何获取在子菜单中单击的 MenuItem
的 ID。我找不到适合我需要的方法。
让我与您分享我的代码。任何帮助将不胜感激。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
mToolbar.setTitleTextAppearance(this, R.style.TextAppearance_Widget_Event_Toolbar_Title);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerToggle = new ActionBarDrawerToggle(
this, mDrawerLayout, mToolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerToggle.syncState();
mFrameLayout = (FrameLayout) findViewById(R.id.content_frame);
NavigationView navigationView = (NavigationView)findViewById(R.id.nav_view);
mDrawerMenu = navigationView.getMenu();
addCitiestoMenu();
navigationView.setNavigationItemSelectedListener(this);
}
子菜单添加城市的方法
private void addCitiestoMenu() {
cityArrayList = RealmHelper.getStoredCities();
SubMenu submenu = mDrawerMenu.getItem(0).getSubMenu();
submenu.setIcon(R.drawable.ic_place_black_24dp);
submenu.setHeaderTitle("test");
int i = 0;
for (City city: cityArrayList) {
submenu.add(city.getCityName());
submenu.getItem(i).setIcon(R.drawable.ic_place_black_24dp);
i++;
}
}
onNavigationItemSelected 方法获取点击子菜单的id
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
Log.v(LOG_TAG, "id: "+id);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
您必须在菜单项上设置一个 ID。设置 id 只能使用 Menu
的 add
方法之一,例如Menu.add()
。更改您的 addCitiestoMenu()
:
private void addCitiestoMenu() {
cityArrayList = RealmHelper.getStoredCities();
SubMenu submenu = mDrawerMenu.getItem(0).getSubMenu();
submenu.setIcon(R.drawable.ic_place_black_24dp);
submenu.setHeaderTitle("test");
for (City city : cityArrayList) {
int cityId = city.getId(); // Get the id (You'll probably need to replace getId() )
MenuItem item = submenu.add(Menu.NONE, cityId, Menu.NONE, city.getCityName());
item.setIcon(R.drawable.ic_place_black_24dp);
}
}