Android:从登录到注销更改字符串值

时间:2014-07-25 20:14:35

标签: android menu

我的菜单中有一个要登录的项目,但是当您登录时我希望它说出来。

如何?

如果我要在创建项目后更改项目,可能是通过此方法

@Override
public boolean onCreateOptionsMenu( Menu menu ) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate( R.menu.menu_main, menu );
    return true;
}

afaik onCreateOptionsMenu()发生在onCreate之后,因此为菜单放置任何getItemId()会立即给我一个NullPointerException。

我希望应用程序找出它是否应该使用字符串R.string.Logout,如果它已登录。

我甚至不知道该搜索什么问题。我发现的只是如何创建一个字符串实现名称,如答案https://stackoverflow.com/a/7646689/3064486

3 个答案:

答案 0 :(得分:1)

您应该使用onPrepareOptionsMenu(Menu menu)来更新菜单项

@Override
public boolean onPrepareOptionsMenu(Menu menu){
        super.onPrepareOptionsMenu(menu);


        MenuItem someMenuItem = menu.findItem(R.id.some_menu_item);
        someMenuItem.setTitle("Log out");
        return super.onPrepareOptionsMenu(menu);
    }

要刷新菜单项,请从活动

中调用invalidateOptionsMenu();

来自Android API指南:“如果您想根据活动生命周期中发生的事件修改选项菜单,可以在onPrepareOptionsMenu()方法中执行此操作。此方法会将Menu对象传递给您,因为它当前存在,所以您可以修改它,例如添加,删除或禁用项目。(片段还提供onPrepareOptionsMenu()回调。)“

答案 1 :(得分:0)

充气菜单后,您可以自定义其项目。要获得每个,您必须使用项目的ID呼叫findItem()。特别是,您可以使用setTitle()更改显示的字符串。

例如:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    if (mIsLoggedIn)
        menu.findItem(R.id.action_login).setTitle("Log out");

    return true;
}

其中action_login是您在菜单的xml文件中为此特定菜单项设置的ID。

答案 2 :(得分:0)

 private void updateUI() {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
                NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
                Menu menu = navigationView.getMenu();
                MenuItem nav_signin = menu.findItem(R.id.nav_signin);
                nav_signin.setTitle(MyApp.signedIn ? "Sign out" : "Sign in");
        }
    });
}