【问题标题】:Get item view from ActionBar从 ActionBar 获取项目视图
【发布时间】:2013-02-13 14:47:42
【问题描述】:

我的栏中有一个带有一个菜单项的 ActionBarSherlock。当我打电话时 View item = findViewById(R.id.my_item);in 活动按钮 onClick 一切正常。 但是当我尝试在onCreateonResume 甚至onPostResume 中执行此操作时,它始终是null。在从资源中扩充我的菜单后,我也尝试在 onCreateOptionsMenu(Menu menu) 中执行此操作,但没有任何成功。

因此,我无法理解操作栏项目的创建时间以及如何捕捉这一时刻?

【问题讨论】:

  • 您是否在 onCreateOptionsMenu(Menu menu) View myView = menu.findItem(R.id.my_menu_id).getActionView(); 中尝试了以下操作?
  • @GauravArora 是的,我试了一下,但 getActionView 返回 null

标签: android actionbarsherlock activity-lifecycle android-inflate


【解决方案1】:

正如herehere 所说,getActionView 返回我们在setActionView 中设置的视图。因此,唯一一种自定义操作栏菜单项的方法描述here

【讨论】:

  • 你是对的,我相信我假设你已经在使用 setActionView()。对此感到抱歉。
  • 我不知道我们的世界上有三个这里... :)
【解决方案2】:

实际上可以获得操作项的视图,即使它不是自定义的。

但是,请注意,有时操作项会出现在溢出菜单中,因此您可能会得到一个空值。

那么,你该怎么做呢?

这是一个示例代码:

public boolean onCreateOptionsMenu(final Menu menu) {
  getSupportMenuInflater().inflate(R.menu.main, menu);
  new Handler().post(new Runnable() {
    @Override
    public void run() {
      final View syncItemView = findViewById(R.id.action_search);
      ...

这是在 android 4.1.2 和 android 2.3.5 上使用 actionBarSherlock 库时测试的。

另一种选择是使用更广泛的方式,用在showcaseView libraryhere上。

【讨论】:

  • @SteelFedeX 遗憾的是 Github 就是这样工作的。您需要在那里找到 ShowcaseView 类。我再次更新了链接。希望它现在有效。
【解决方案3】:

首先得到一个菜单参考如下:

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
     getMenuInflater().inflate(R.menu.custom_menu, menu);
     customMenu = menu;
     return super.onCreateOptionsMenu(menu);
 }

之后你可以得到你需要的物品如下

     customMenu.getItem(0);

【讨论】:

    猜你喜欢
    • 2013-11-30
    • 1970-01-01
    • 2023-03-11
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多