- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我在 invalidateOptionsMenu()
上搜索了很多,我知道它的作用。但我想不出任何现实生活中这种方法有用的例子。
我的意思是,例如,假设我们想在 ActionBar
中添加一个新的 MenuItem
,我们可以简单地从 onCreateOptionsMenu(Menu menu )
并在任何按钮的操作中使用它。
现在我真正的问题是,是否遵循 only 使用 invalidateOptionsMenu()
的方式?
bool _OtherMenu;
protected override void OnCreate (Bundle bundle)
{
_OtherMenu = false;
base.OnCreate (bundle);
SetContentView (Resource.Layout.Main);
Button button = FindViewById<Button> (Resource.Id.myButton);
button.Click += delegate
{
if(_OtherMenu)
_OtherMenu = false;
else
_OtherMenu = true;
InvalidateOptionsMenu ();
};
}
public override bool OnCreateOptionsMenu (IMenu menu)
{
var inflater = this.SupportMenuInflater;
if(_OtherMenu)
inflater.Inflate (Resource.Menu.another_menu, menu);
else
inflater.Inflate (Resource.Menu.main_activity_menu, menu);
return base.OnCreateOptionsMenu (menu);
}
单击该按钮会出现一个不同的菜单。再次单击该按钮,将出现上一个菜单。
附:对不起 C# 语法。
最佳答案
invalidateOptionsMenu()
用来表示Android,菜单的内容发生了变化,需要重绘菜单。例如,您单击一个在运行时添加另一个菜单项或隐藏菜单项组的按钮。在这种情况下,您应该调用 invalidateOptionsMenu()
,以便系统可以在 UI 上重新绘制它。此方法是 OS 调用 onPrepareOptionsMenu()
的信号,您可以在其中实现必要的菜单操作。此外,OnCreateOptionsMenu()
在activity(fragment)创建过程中只被调用一次,因此该方法无法处理运行时菜单的变化。
全部可以在 documentation 中找到:
After the system calls onCreateOptionsMenu(), it retains an instance of the Menu you populate and will not call onCreateOptionsMenu() again unless the menu is invalidated for some reason. However, you should use onCreateOptionsMenu() only to create the initial menu state and not to make changes during the activity lifecycle.
If you want to modify the options menu based on events that occur during the activity lifecycle, you can do so in the onPrepareOptionsMenu() method. This method passes you the Menu object as it currently exists so you can modify it, such as add, remove, or disable items. (Fragments also provide an onPrepareOptionsMenu() callback.)
On Android 2.3.x and lower, the system calls onPrepareOptionsMenu() each time the user opens the options menu (presses the Menu button).
On Android 3.0 and higher, the options menu is considered to always be open when menu items are presented in the action bar. When an event occurs and you want to perform a menu update, you must call invalidateOptionsMenu() to request that the system call onPrepareOptionsMenu().
关于Android - 正确使用 invalidateOptionsMenu(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27984041/
在我的一个 fragment 类中,我使用 invalidateOptionsMenu() 如下 invalidateOptionsMenu(activity) 但它已被弃用 'invalidateO
我正在创建一个菜单,其中一个项目用于锁定对象。单击此项目时,应使用按钮重新创建菜单以解锁该项目。我为此创建了两个菜单。这工作正常。我读到在 Android 版本 >= 11 中,显示菜单时不再调用 o
我在 invalidateOptionsMenu() 上搜索了很多,我知道它的作用。但我想不出任何现实生活中这种方法有用的例子。 我的意思是,例如,假设我们想在 ActionBar 中添加一个新的 M
我在这里犯了一个大错误。我正在尝试使用 supportInvalidateOptionsMenu() 更改操作栏菜单;但是当函数执行时,应用程序关闭,没有错误。 奇怪的是,在我的 Galaxy Nex
您好 Android 开发者, 我看到很多关于选项菜单更新的问题。但是,每个答案都说我必须调用 invalidateOptionsMenu()。 我的问题是,有没有其他方法可以在不调用方法 inval
我换了我的 Activity到 AppCompatActivity现在调用invalidateOptionsMenu()在onOptionsItemSelected()不再像以前那样更新菜单项。 on
我在网上搜索了答案,但未能找到我需要的解决方案。我的问题是如何再次重新创建菜单以更新 BaseAdapter 中的购物车计数图标。我现在正在使用的应用程序是一个计算用户订购商品的应用程序,它也有商品类
我正在尝试让我的选项菜单重绘(从同一 Activity 中),我称之为登录对话框。 这是设置。从应用程序中的任何 Activity ,用户可以单击溢出/选项菜单并单击登录。弹出一个对话框,他们有望成功
我有一个 fragment 需要构建自己的操作栏: public class CalendarFragment extends Fragment { public CalendarFragment()
我想根据编辑文本中的文本是否显示或隐藏操作栏中的项目 所以我做了以下 public class NounSearch extends android.app.Fragment
我想在搜索 View 展开时隐藏一些菜单项,所以这是我使用的代码: @Override public boolean onPrepareOptionsMenu(Menu menu) { men
我非常想知道调用 invalidateOptionsMenu() 时会发生什么。它是重新绘制整个操作栏还是只是调用 onCreateOptionsMenu(),然后调用 onPrepareOption
我正在使用 DrawerLayout,并且在打开或关闭时使用 invalidateOptionsMenu()。问题在于打开和关闭 DrawerLayout 后 SearchView 停止工作。 第 1
我使用 ActivityCompat.invalidateOptionsMenu(MainActivity.this); 以便我的菜单项“刷新”可以自动启用/禁用,而无需触摸“菜单”选项(想象用户使菜
每次按下其中一个按钮时,我都会尝试更新应用程序的菜单按钮;在 API 11+ 中,您需要调用 invalidateOptionsMenu() 来执行此操作;由于我希望我的应用兼容较低的API,如何仅在
我有一个带有回调实现的 MainActivity: DrawerListFragment.Callback ItemListFragment.Callbacks SearchView.OnQueryT
我是一名优秀的程序员,十分优秀!