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

Access to global variable in menu XML file in Android

我正在创建一个用户必须自己连接的应用程序。我正在尝试实现一个菜单,其中第一项文本将是已连接用户的名称,一旦单击,它将进入用户配置文件。为了存储已连接的用户信息,我创建了自己的 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 中是行不通的。我该怎么做?也许,我应该 re-title 将项目放在其他地方?我找到了一个解决方案,我在 activity 的 onCreateOptionsMenu 事件中更改了标题,但是有没有比在包含菜单的每个 activity 中更改项目标题更好的方法?

编辑 - 这是我的 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>

谢谢。

定义 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);
    }
}

具有此菜单的每个 activity 都应扩展 MyActivity

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