我试图让我的选项菜单重绘(在同一个活动中)我称之为登录对话框.
这是设置.从应用程序中的任何活动,用户可以单击溢出/选项菜单,然后单击登录.弹出一个对话框,希望他们能够成功登录.然后对话框结束().如果你点击菜单它仍然显示“登录” – 而不是“注销”.看来我没有使用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(菜单);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。