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

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

这是设置.从应用程序中的任何活动,用户可以单击溢出/选项菜单,然后单击登录.弹出一个对话框,希望他们能够成功登录.然后对话框结束().如果你点击菜单它仍然显示登录” – 而不是“注销”.看来我没有使用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”.

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

编辑:

@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

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

请记住onPrepareOptionsMenu():

You must return true for the menu to be displayed; if you return false it will not be shown.

编辑:对不起我错过了你最底层的代码.让我快速检查一下.

edit2:你忘了打电话给super.onPrepareOptionsMenu(菜单);

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

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...