我有一个导航抽屉,里面有三个菜单项。在我的MainActivity.java
中,我将onNavigationItemSelected()
侦听器设置为处理单击的导航项。单击时,将显示一个自定义抽屉对话框。
航行抽屉
定制抽屉对话框(平铺层)
MainActivity.java
public boolean onNavigationItemSelected(MenuItem item)
{
// Create custom drawer dialog
drawerDialog = new Dialog(MainActivity.this);
drawerDialog.setContentView(R.layout.dialog_drawer);
// Handle navigation view item clicks here.
int selectedItemId = item.getItemId();
if (selectedItemId == R.id.layerMenu)
{
...
}
else if (selectedItemId == R.id.basemapMenu)
{
...
}
else if (selectedItemId == R.id.tiledLayerMenu)
{
// Setup drawer dialog (Tiled Layers)
}
// Show drawer dialog
drawerDialog.show();
...
mDrawerLayout.closeDrawer(GravityCompat.START);
return true;
}
我也有一个自定义通知对话框。当“无数据发现通知”对话框出现时,我有下载按钮,它将打开抽屉对话框(平铺层)。
自定义通知对话框(未找到数据)
现在.。如何触发onNavigationItemSelected()
programmatically下载按钮上的?这就是我尝试过但没有成功的地方:
downloadButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
// Trying to click Tiled Layers navigation item here
// 1
//NavigationView navigationView = (NavigationView) findViewById(R.id.mainNavView);
//navigationView.getMenu().getChildAt(2).performClick();
// 2
//((NavigationMenuItemView) findViewById(R.id.tiledLayerMenu)).callOnClick();
// 3
//onNavigationItemSelected(navigationView.getMenu().getItem(2))); //
// Close dialog
noticeDialog.dismiss();
}
});
请帮帮我。谢谢。
更新
好的.我只是做一些像like建议的事情,这样就可以了。我将onNavigationItemSelected()
中的所有长代码移到新函数showDrawerDialog
并传递item id。在按钮点击,我也做同样的。不需要查找MenuItem
,只需传递项id。谢谢!
MainActivity.java
public boolean onNavigationItemSelected(MenuItem item)
{
int selectedItemId = item.getItemId();
showDrawerDialog(selectedItemId);
mDrawerLayout.closeDrawer(GravityCompat.START);
return true;
}
public void showDrawerDialog(final int selectedItemId)
{
// Create custom drawer dialog
drawerDialog = new Dialog(MainActivity.this);
drawerDialog.setContentView(R.layout.dialog_drawer);
// Handle navigation view item clicks here.
//int selectedItemId = item.getItemId();
if (selectedItemId == R.id.layerMenu)
{
...
}
else if (selectedItemId == R.id.tiledLayerMenu)
{
// Setup drawer dialog (Tiled Layers)
}
// Show drawer dialog
drawerDialog.show();
}
单击“下载”按钮,
downloadButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
// Trying to click Tiled Layers navigation item here
showDialogDrawer(R.id.tiledLayerMenu);
// Close dialog
noticeDialog.dismiss();
}
});
发布于 2017-09-28 05:13:27
你可以用这个技巧
小变化onNavigationItemSelected(MenuItem item)
首先声明一个int类变量。
//clicked id holder
int clicked = 0;
现在在onNavigationItemSelected(MenuItem item)
中使用它
public boolean onNavigationItemSelected(MenuItem item)
{
int selectedItemId = item.getItemId();
if (selectedItemId == R.id.layerMenu || clicked == R.id.layerMenu)
{
//your action code
}
else if (selectedItemId == R.id.tiledLayerMenu || clicked == R.id.tiledLayerMenu)
{
// your action code
}
//clear clicked value
clicked = 0;
mDrawerLayout.closeDrawer(GravityCompat.START);
return true;
}
在单击按钮中进行编辑
downloadButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
//setting id to clicked variable
clicked = R.id.m_layerMenu;
//fire the navigation selection
onNavigationItemSelected(navigationView.getMenu().getItem(0));
}
});
我帮你做测试..。它100%起作用..。试试..。祝好运。
发布于 2019-06-05 10:20:26
这很容易,一号线回答!
onNavigationItemSelected(navigationView.getMenu().findItem(R.id.my_id));
发布于 2021-02-02 10:16:28
您可以在android的任何菜单上尝试这种方法。
yourMenu.performIdentifierAction(menuItemId, flags)
根据标志的不同,您可以选择是否关闭菜单主机。
https://stackoverflow.com/questions/46460752
复制相似问题