我正在创建一个用户必须自己连接的应用。我正在尝试实现一个菜单,其中第一个项目文本将是已连接用户的名称,一旦点击,它将带到用户配置文件。为了存储连接的用户信息,我创建了自己的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>
感谢。
答案 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
应该扩展FragmentActivity
或ActionBarActivity
。