Java 动态更改操作栏中的项目标题
我想做的是:从Java 动态更改操作栏中的项目标题,java,android,android-actionbar,Java,Android,Android Actionbar,我想做的是:从onClick方法更改操作栏中项目的标题。 创建选项菜单的代码: @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu items for use in the action bar MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.option_menu, menu);
onClick
方法更改操作栏中项目的标题。
创建选项菜单的代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.option_menu, menu);
return super.onCreateOptionsMenu(menu);
}
菜单的我的选项\u menu.xml
:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/state"
android:title="@string/title_not_connected"
android:showAsAction="ifRoom" />
</menu>
正如您所看到的,我正试图通过Id在菜单中查找此项,但我遇到了以下错误:对于R.menu类型,findItem(int)方法未定义。我正在使用片段,而ReceiveSectionFragment
使用R.layout.receive
layout
我如何处理这个问题?也许,我用了错误的方法,把一切都搞错了
我没有使用ActionBar Sherlock。如果要更改ActionBar菜单,必须调用InvalidateOptions功能表
然后覆盖创建选项菜单上的oncreateoptions
,以使用所做的更改重建菜单。不能在为构建菜单提供的方法之外编辑菜单
每次调用invalidateOptions功能表
时,您的菜单将由onCreateOptions功能表
方法重建,因此您需要在那里进行所有更改
无论您是否使用ActionBarSherlock,这都是正确的
e、 g:
设置一个变量来保存标题
String MyMenuTitle = "Default Menu";
你的一吻
public void onClick(View view) {
MyMenuTitle = "My New Menu Title";
}
你的菜单代码
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.option_menu, menu);
MenuItem item = menu.findItem(R.id.state);
item.setTitle(MyMenuTitle);
return super.onCreateOptionsMenu(menu);
}
要更改操作栏菜单,必须调用invalidateOptions功能表
然后覆盖创建选项菜单上的oncreateoptions
,以使用所做的更改重建菜单。不能在为构建菜单提供的方法之外编辑菜单
每次调用invalidateOptions功能表
时,您的菜单将由onCreateOptions功能表
方法重建,因此您需要在那里进行所有更改
无论您是否使用ActionBarSherlock,这都是正确的
e、 g:
设置一个变量来保存标题
String MyMenuTitle = "Default Menu";
你的一吻
public void onClick(View view) {
MyMenuTitle = "My New Menu Title";
}
你的菜单代码
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.option_menu, menu);
MenuItem item = menu.findItem(R.id.state);
item.setTitle(MyMenuTitle);
return super.onCreateOptionsMenu(menu);
}
应该在要隐藏菜单的片段中插入以下行
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
MenuItem item = (MenuItem) menu.findItem(R.id.your_action);
item.setVisible(false);
}
应该在要隐藏菜单的片段中插入以下行
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
MenuItem item = (MenuItem) menu.findItem(R.id.your_action);
item.setVisible(false);
}
还有另一种方法可以在不使菜单失效的情况下执行此操作
首先在onCreate方法之前将MenuItem声明为静态
static MenuItem item;
然后在OnCreateOptions菜单中初始化处理程序
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
item = menu.findItem(R.id.state);
return true;
}
最后,当您想要更改标题时,请使用setTitle
item.setTitle("your title");
我希望这有帮助…还有另一种方法可以做到这一点,而不会使菜单失效
首先在onCreate方法之前将MenuItem声明为静态
static MenuItem item;
然后在OnCreateOptions菜单中初始化处理程序
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
item = menu.findItem(R.id.state);
return true;
}
最后,当您想要更改标题时,请使用setTitle
item.setTitle("your title");
我希望这有助于……它的工作
静态菜单项;//定义全局变量
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
inflater.inflate(R.menu.minu_filter, menu);
menu.findItem(action_enter_manually).setVisible(true);
// allocation id
item = menu.findItem(R.id.action_enter_manually);
}
在何处呼叫
item.setTitle(“您的标题”) 它在工作
静态菜单项;//定义全局变量
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
inflater.inflate(R.menu.minu_filter, menu);
menu.findItem(action_enter_manually).setVisible(true);
// allocation id
item = menu.findItem(R.id.action_enter_manually);
}
在何处呼叫
item.setTitle(“您的标题”) 我添加了invalidateOptionsMenu()
,但我仍然无法生成我的项目,原因是:没有为类型R.menu定义findItem(int)方法
,然后您在错误的位置调用它。您没有从OnClick处理程序访问菜单的权限。您必须在OnCreateOptions菜单中调用findItem。我已经用一个例子更新了我的答案。是的,但我真正要做的是根据单击的按钮设置这个特定项目的各种标题,这样就没有帮助了。即使我使用了invalidateOptions功能表()
,我也会不断地将标题设置为“新标题”
…这是唯一的方法。如果要更改菜单,必须调用InvalidateOptions菜单,让OnCreateOptions菜单重建菜单。您必须包含代码,以便使用条件语句在新状态下重建菜单。“新标题”就是一个例子。您应该使用实际需要的变量或值。e、 g在OnClick set字符串MyMenuTitle=“My New Menu Title”中,在菜单构建过程中使用它。请再读一遍我的完整答案。你还不明白。我没有解释如何使用变量,因为这是基本的,我假设您知道这一点。我用一个分步指南再次更新了答案。我添加了invalidateOptionsMenu()
,但我仍然无法构建我的项目,因为:没有为类型R.menu定义findItem(int)方法。然后您在错误的位置调用了它。您没有从OnClick处理程序访问菜单的权限。您必须在OnCreateOptions菜单中调用findItem。我已经用一个例子更新了我的答案。是的,但我真正要做的是根据单击的按钮设置这个特定项目的各种标题,这样就没有帮助了。即使我使用了invalidateOptions功能表()
,我也会不断地将标题设置为“新标题”
…这是唯一的方法。如果要更改菜单,必须调用InvalidateOptions菜单,让OnCreateOptions菜单重建菜单。您必须包含代码,以便使用条件语句在新状态下重建菜单。“新标题”就是一个例子。您应该使用实际需要的变量或值。e、 g在OnClick set字符串MyMenuTitle=“My New Menu Title”中,在菜单构建过程中使用它。请再读一遍我的完整答案。你还不明白。我没有解释如何使用变量,因为这是基本的,我假设您知道这一点。我用一个分步指南再次更新了答案。