使用操作栏/菜单项登录/注销

时间:2014-06-24 16:54:07

标签: java android xml

我有一个菜单项显示在我的操作栏中,我希望它显示“登录”或“注销”,具体取决于用户是登录还是注销。但是,我无法更改文本,因为为了这样做,我必须从invalidateOptionsMenu()方法中调用onOptionsSelected()。我目前有一个更新应该显示的文本的方法,这工作正常,但为了显示该文本,我必须重新创建选项菜单。

以下是我的一些代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    //Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    this.menu = menu;
    updateMenuTitles();
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.login:
            if (!loggedIn) {
                Authentication();
            } else {
                loggedIn = false;
                authentication = false;
                updateMenuTitles();
                Toast.makeText(getApplicationContext(),"Log Out Successful",Toast.LENGTH_SHORT).show();
            }
            break;
    }
    return super.onOptionsItemSelected(item);
}

private void updateMenuTitles() {
    MenuItem bedMenuItem = menu.findItem(R.id.login);
    if (loggedIn) {
        bedMenuItem.setTitle("Log Out");
    }else {
        bedMenuItem.setTitle("Login");
    }
}

2 个答案:

答案 0 :(得分:0)

当我使用 firebase 时,我正在检查用户是否为空。基于此,我正在添加我需要的菜单选项。 像这样:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();

    if (firebaseUser!=null){
        inflater.inflate(R.menu.landing_logout,menu);
    }else {
        inflater.inflate(R.menu.landing_login, menu);
    }

    return true;
}

答案 1 :(得分:-1)

我建议在菜单中设置两个不同的按钮,并根据需要切换其可见性。 像这样:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.login:
                 loggedIn = true;
                 Authentication();
                 updateMenuTitles();
            break;

            case R.id.logout:
                loggedIn = false;
                authentication = false;
                updateMenuTitles();
                Toast.makeText(getApplicationContext(),"Log Out Successful",Toast.LENGTH_SHORT).show();
            break;
    }
    return super.onOptionsItemSelected(item);
}

private void updateMenuTitles() {
    MenuItem loginMenuItem = menu.findItem(R.id.login);
    MenuItem logoutMenuItem = menu.findItem(R.id.logout);

    if (loggedIn) {
        loginMenuItem.setVisibility(View.VISIBLE);
        logoutMenuItem.setVisibility(View.GONE);
    }else {
        logoutMenuItem.setVisibility(View.VISIBLE);
        loginMenuItem.setVisibility(View.GONE);
    }
}