Android子菜单:如何返回上一个子菜单(或子菜单的主菜单)

时间:2016-07-06 10:30:32

标签: java android html back submenu

初学者正在尝试组织他的菜单...但我在子菜单中实现“后退”选项时遇到问题。我希望它能自动引导用户进入主菜单。但我找不到解决方案。以前有人有同样的挑战吗?

我在上下文菜单中使用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);
}

单击“返回”后,我应该在代码中添加什么才能返回主菜单?

1 个答案:

答案 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;
}