在Android中的菜单XML文件中访问全局变量

时间:2015-02-15 20:36:53

标签: android xml global-variables

我正在创建一个用户必须自己连接的应用。我正在尝试实现一个菜单,其中第一个项目文本将是已连接用户的名称,一旦点击,它将带到用户配置文件。为了存储连接的用户信息,我创建了自己的android.app.Application子类,其中包含连接的用户:

private User currUser;

public User getCurrUser() {
    return this.currUser;
}

public void setCurrUser(User currUser) {
    this.currUser = currUser;
}

我想知道如何在菜单XML文件中访问此全局变量,以便第一项的标题是连接的用户名?从逻辑上讲,我会这样做:

<item android:id="@+id/action_profil" android:title=(MyApp)this.getApplication().getCurrUser().getM_UserName()
    android:orderInCategory="100" app:showAsAction="never" />

但我知道这在XML中是行不通的。我该怎么做?也许,我应该在其他地方重新标题这个项目?我找到了一个解决方案,我在活动的onCreateOptionsMenu事件中更改了标题,但有没有比在包含菜单的每个活动中更改项目标题更好的方法?

编辑 - 这是我的XML文件

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.aramjeremie.liftm8.HomeActivity">

    <item android:id="@+id/action_profil" android:title="Mon_Nom"
        android:orderInCategory="100" app:showAsAction="never" />

    <item android:id="@+id/action_home" android:title="@string/action_home"
        android:orderInCategory="100" app:showAsAction="never" />

    <item android:id="@+id/action_notifications" android:title="@string/action_notifications"
        android:orderInCategory="100" app:showAsAction="never" />

    <item android:id="@+id/action_passenger" android:title="@string/action_passenger"
        android:orderInCategory="100" app:showAsAction="never" />

    <item android:id="@+id/action_driver" android:title="@string/action_driver"
        android:orderInCategory="100" app:showAsAction="never" />

    <item android:id="@+id/action_search" android:title="@string/action_search"
        android:orderInCategory="100" app:showAsAction="never" />

    <item android:id="@+id/action_settings" android:title="@string/action_settings"
        android:orderInCategory="100" app:showAsAction="never" />

    <item android:id="@+id/action_signOut" android:title="@string/action_signOut"
        android:orderInCategory="100" app:showAsAction="never" />
</menu>

感谢。

1 个答案:

答案 0 :(得分:1)

定义Activity的子类并覆盖onPrepareOptionsMenu,将个人资料项目的标题设置为当前用户的用户名。

public class MyActivity extends Activity {

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        CharSequence currentUser = ((MyApp) this.getApplication()).getCurrUser().getM_UserName();
        MenuItem profileMenuItem = menu.findItem(R.id.action_profil);
        if(profileMenuItem != null) {
           profileMenuItem.setTitle(currentUser);
        }
        return super.onPrepareOptionsMenu(menu);
    }
}

具有此菜单的每个活动都应该扩展MyActivity

如果您正在使用兼容性库,MyActivity应该扩展FragmentActivityActionBarActivity