我正在创建一个应用程序,用户必须在其中连接自己。我正在尝试实现一个菜单,其中第一个项目文本将是所连接用户的名称,并且一旦单击,它将带到用户个人资料。为了存储连接的用户信息,我创建了自己的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>
谢谢。
定义的子类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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句