初学者正在尝试组织他的菜单...但我在子菜单中实现“后退”选项时遇到问题。我希望它能自动引导用户进入主菜单。但我找不到解决方案。以前有人有同样的挑战吗?
我在上下文菜单中使用xml:
<item
android:icon="@android:drawable/ic_menu_sort_by_size"
android:title="Menu"
android:id="@+id/main_main_menu"
app:showAsAction="always">
<menu>
<item
android:id="@+id/goto_main_menu"
android:orderInCategory="1"
android:title="@string/action_goto"
android:icon="@android:drawable/ic_menu_directions">
<menu>
<item
android:orderInCategory="1"
android:title="New measurment"
android:icon="@android:drawable/ic_menu_add"/>
<item
android:orderInCategory="2"
android:title="Archive"
android:icon="@android:drawable/ic_menu_agenda"/>
<item
android:id="@+id/back_main_menu"
android:orderInCategory="3"
android:title="Back"
android:icon="@android:drawable/ic_menu_revert"/>
</menu>
</item>
<item
android:orderInCategory="4"
android:id="@+id/logout"
android:title="@string/action_logout"
android:icon="@android:drawable/ic_menu_set_as"/>
</menu>
</item>
我使用以下代码显示我的菜单:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
使用以下代码管理选项点击:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (id == R.id.back_main_menu) {
Toast.makeText(MainActivity.this, "Let's go back...", Toast.LENGTH_LONG).show();
return true;
}
if (id == R.id.logout) {
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
}
return super.onOptionsItemSelected(item);
}
单击“返回”后,我应该在代码中添加什么才能返回主菜单?
答案 0 :(得分:0)
尝试使用您的活动的 onBackPressed()超类
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (id == R.id.back_main_menu) {
super.onBackPressed();
return true;
}
// ...
return super.onOptionsItemSelected(item);
}
如果这不起作用,你必须给我更多的信息。 如果您使用多个活动,则可以像这样调用 finish()方法:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (id == R.id.back_main_menu) {
this.finish()
return true;
}
// ...
return super.onOptionsItemSelected(item);
}
完成()将关闭实际查看的活动,并将导航至上次已知/已查看的活动。
<强> EDIT1 强> 如果您只有一个活动,请使用碎片动态地将视图扩展到您的活动中。从开发者页面查看该示例: https://developer.android.com/training/basics/fragments/fragment-ui.html
<强> EDIT2 强> 如果您希望显示不同的菜单项,请使用 onPrepareOptionsMenu()。 每当您想要新菜单时,都可以这样调用 invalidateOptionsMenu :
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (id == R.id.back_main_menu) {
invalidateOptionsMenu();
return true;
}
// ...
return super.onOptionsItemSelected(item);
}
此外,您必须在活动中定义/覆盖 onPrepareOptionsMenu 方法:
public void onPrepareOptionsMenu(Menu menu)
{
if(mainMenuDisplay) // If main menu shall be displayed
{
// Use the id's of your menu entries to enable or disable their visibility
menu.findItem(R.id.main_menu_entry1).setVisible(true);
menu.findItem(R.id.other_menu_entry1).setVisible(false);
}
return true;
}