我試圖在我的應用中實現刷新按鈕,以允許用戶手動重新同步到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>
的問題是,它總是顯示進度。我想知道它是否像搜索部件(我真正看到的唯一示例)一樣工作,並將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);
}
}
這是我的課。但是,當我嘗試引用它時:
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);
當我嘗試設置可見性時,還給了我一個空指針。我的參考資料有什麼問題?
這不是在setActionView失敗,而是在你正在做的地方(MenuItem)findViewById(R.id.main_menu_refresh)。它顯然是一個ClassCastException將ActionItemView轉換爲MenuItem。 – Namratha 2013-01-29 10:57:19
我想通了。我發現此前[SO](http://stackoverflow.com/questions/7142722/replacing-an-action-bar-menu-item-icon-with-an-indeterminate-progressbar)的問題。從那裏,我發現代碼谷歌寫這樣做[這裏](http://developer.android.com/resources/samples/ActionBarCompat/src/com/example/android/actionbarcompat/ActionBarHelperHoneycomb.html)。它基本上是複製和粘貼在那個點上,並且完美地工作。 – 2012-03-30 17:23:11