在登录系统中使用 invalidateOptionsMenu() (Android)

2024-01-23

我试图让我的选项菜单重新绘制(在同一活动中),我称之为登录对话框。

这是设置。从应用程序中的任何活动中,用户可以单击溢出/选项菜单,然后单击登录。弹出一个对话框,希望他们可以成功登录。然后对话框完成()。如果您单击菜单,它仍然显示“登录”,而不是“注销”。看来我没有使用 invalidateOptionsMenu 对吧?这是代码:

选项菜单 调用对话框的代码:

case R.id.Login:
        Intent i = new Intent(this, Login.class);
        startActivityForResult(i, 0);
        return true;

Login.class 是一个对话框。当用户单击对话框中的提交按钮时,会发生这种情况:

       // set log in var's here

        Intent in = new Intent();
        setResult(1, in);
        finish();

然后回到原始活动:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == 1) {

        MyActivity.this.invalidateOptionsMenu();


    }
}

使用 Toast,我已确认正在调用“1”。

如何使菜单无效并重新绘制菜单,以便它包含注销选项(因为用户现在已登录?)

EDIT:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

    MenuItem Rules = menu.findItem(R.id.Rules);
    MenuItem About = menu.findItem(R.id.About);
    MenuItem Profile = menu.findItem(R.id.Profile);
    MenuItem Login = menu.findItem(R.id.Login);
    MenuItem Logout = menu.findItem(R.id.Logout);

    // set the menu options depending on login status
    if (LoggedStatus == true) {
        // show the log out option
        Logout.setVisible(true);
        Login.setVisible(false);

        Rules.setVisible(true);
        Profile.setVisible(true);
        About.setVisible(true);
    } else {
        // show the log in option
        Logout.setVisible(false);
        Login.setVisible(true);

        Rules.setVisible(true);
        Profile.setVisible(false); // hide
        About.setVisible(true);
    }

    return true;
}

我会仔细看看这个:http://developer.android.com/guide/topics/ui/menus.html#ChangingTheMenu http://developer.android.com/guide/topics/ui/menus.html#ChangingTheMenu

Calling invalidateOptionsMenu()在 Android 3.0+ 上会调用onPrepareOptionsMenu(). A Menu传递给该方法,并且您希望使用该对象对菜单进行更改,无论是添加还是删除菜单项。

请记住这一点onPrepareOptionsMenu():

必须返回 true 才能显示菜单;如果返回 false 则不会显示。

编辑:抱歉,我在最底部错过了您的代码。让我快速检查一下。

edit2:你忘记打电话了super.onPrepareOptionsMenu(menu);

edit3:现在您已经确定菜单确实有效,唯一可能导致其不显示的是LoggedStatus。确保正确修改它应该可以解决所有问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在登录系统中使用 invalidateOptionsMenu() (Android) 的相关文章

随机推荐