我正在创建一个菜单,其中一个项目用于锁定一个对象.单击此项目时,应使用按钮重新创建菜单以解锁项目.我为此创建了两个菜单.这工作正常.我读到在Android版本> = 11时,在显示菜单时不再调用onPrepareOptionsMenu,我必须调用invalidateOptionsMenu().所以我将构建目标(在Manifest和属性中)更改为11并在AVD 4.0.3上运行应用程序.该程序仍然工作正常,但我认为它应该不再,我应该检查
if (Build.VERSION.SDK_INT >= 11)
{
invalidateOptionsMenu();
}
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
public class MainActivity3 extends Activity{
boolean locked;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
locked = false;
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.changing_menu1, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.clear();
MenuInflater inflater = getMenuInflater();
if (locked) {
inflater.inflate(R.menu.changing_menu2, menu);
}
else {
inflater.inflate(R.menu.changing_menu1, menu);
}
return super.onPrepareOptionsMenu(menu);
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.Menu1:
break;
case R.id.Menu2 :
break;
case R.id.Menu3 :
locked = !locked;
break;
}
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,菜单仍然在4.0中刷新/重新创建.我是否误解了invalidateOptionsMenu()的用法;?
Jus*_*ris 32
invalidateOptionsMenu()被添加以使我们有能力onCreateOptionsMenu()再次被召唤. onPrepareOptionsMenu()每次调用菜单时仍然会调用.
您在上面尝试实现的是一个很好的示例,说明何时使用, invalidateOptionsMenu()但由于向后兼容性,您需要同时执行以下两项操作:
if (Build.VERSION.SDK_INT >= 11) {
invalidateOptionsMenu();
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
if (Build.VERSION.SDK_INT >= 11) {
selectMenu(menu);
}
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if (Build.VERSION.SDK_INT < 11) {
selectMenu(menu);
}
return true;
}
private void selectMenu(Menu menu) {
menu.clear();
MenuInflater inflater = getMenuInflater();
if (locked) {
inflater.inflate(R.menu.changing_menu2, menu);
}
else {
inflater.inflate(R.menu.changing_menu1, menu);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27060 次 |
| 最近记录: |