我正在尝试在我的应用程序中实现一个刷新按钮,以允许用户手动重新同步到Web服务器。代码可以正常工作,但我很难弄清楚操作视图(至少我认为我应该使用它们)。
我的菜单项在这里:
<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 在此期间显示),并且能够在之后将其恢复为静态图标。
我尝试阅读这个问题,但我很难理解答案的意思。我觉得我正在尝试做它所说的事情,但我想不是这样。非常感谢您的帮助。
编辑:对于 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);
}
}
这是我的课程进展。然而,当我尝试引用它时,请使用以下内容:
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视图方面遇到了困难。
编辑2:显然我完全无法引用菜单项。
MenuItem refresh = (MenuItem)findViewById(R.id.main_menu_refresh);
refresh.setVisible(false);
当我尝试设置可见性时,它给了我一个空指针。我的引用有什么问题吗?