android - 更改操作栏中菜单项的 View

标签 android android-actionbar actionview

我正在尝试在我的应用程序中实现一个刷新按钮,以允许用户手动重新同步到网络服务器。代码有效,但我无法弄清楚操作 View (至少,我认为这是我应该使用的)。

我的菜单项在这里:

<item
    android:id="@+id/main_menu_refresh"
    android:enabled="true"
    android:icon="@drawable/refresh"
    android:orderInCategory="1"
    android:showAsAction="ifRoom"
    android:title="@string/refresh" 
    android:actionViewClass="android.widget.ProgressBar">
</item>

问题是,它总是显示 ProgressBar。我想知道它是否像搜索小部件一样工作(我真正在网上看到的唯一示例)并将 collapseActionView 标记添加到 showAsAction 并阻止它立即显示。但是,当我单击刷新按钮时,图标消失了(很好),但操作栏中的标题也消失了,ProgressBar 出现在窗口左侧,标题曾经是。也不是我想要的。

作为最后的努力,我尝试将其添加到我的代码中,并从 XML 中删除 actionViewClass:

MenuItem refresh = (MenuItem)findViewById(R.id.main_menu_refresh);
Log.w("MyApp", "Have Menu");
ProgressBar pb = new ProgressBar(ReadingList.this);
refresh.setActionView(pb);

这也不起作用,在 setActionView 上给我一个空指针错误。

我需要一个可以从任何函数调用的解决方案(开始时有一个自动同步周期,我希望 ProgressBar 也在此期间显示),并能够在之后将其返回到它的静态图标。

我尝试通读 this question ,但我无法理解答案的含义。我觉得我只是想按照它说的去做,但我想不是。非常感谢任何帮助。

编辑:针对 sastraxi 的建议。

public class IconSwitcher extends LinearLayout{



public IconSwitcher(Context context) {
    super(context);

    ProgressBar pb = new ProgressBar(context);
    ImageView iv = new ImageView(context);

    addView(iv);
    addView(pb);
}
}

到目前为止,这是我的类(class)。但是,当我尝试引用它时:

MenuItem refresh = (MenuItem)findViewById(R.id.main_menu_refresh);
IconSwitcher ic = (IconSwitcher) refresh.getActionView();

我得到一个空指针错误。关于创建 IconSwitcher。按钮XML如下:

<item
    android:id="@+id/main_menu_refresh"
    android:enabled="true"
    android:icon="@drawable/refresh"
    android:orderInCategory="1"
    android:showAsAction="ifRoom"
    android:title="@string/refresh" 
    android:actionViewClass="IconSwitcher">
</item>

我在引用 IconSwitcher View 时遇到了困难。

编辑 2:我似乎完全无法引用菜单项。

MenuItem refresh = (MenuItem)findViewById(R.id.main_menu_refresh);
refresh.setVisible(false);

当我尝试设置可见性时,还会给我一个空指针。我的引用文献有什么问题?

最佳答案

与其将操作 View 类设置为 ProgressBar,不如将其设置为自定义 LinearLayout 类,如下所示:

class MyViewItem extends LinearLayout

使用 addView 在其构造函数中添加一个 ProgressBar 和一个 ImageView 作为子项,并将这些子项的可见性设置为 GONE VISIBLE 当您的代码需要时。

关于android - 更改操作栏中菜单项的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9935875/

相关文章:

android - 不推荐使用 ActionBarActivity

ruby-on-rails - Rails - 查看代表数据库中数据的图片

Android ActionBar 自定义 Action View 工具提示

android - 使用图表引擎在饼图中显示 %ofDistribution

android - 只是更新一个小部件 RemoteViews 而不是完全创建一个新的?

android - 安卓市场应用源代码

java - BLE Android - 未调用 onConnectionStateChange

Android Toolbar - 如何为导航模式实现 Spinner?

安卓 : Unable to hide Toolbar or Action bar

ruby-on-rails - 如何使控制台中的 View 缓存片段过期?