2012-03-30 12 views
5

ユーザーが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> 

問題があり、それは常にプログレスバーが表示されます。私はそれが検索ウィジェット(私が実際にオンラインで見ている唯一の例)のように機能していて、showAsActioncollapseActionViewというタグを付け加え、それがすぐに表示されないようにしました。しかし、私がリフレッシュボタンをクリックすると、アイコンは消えますが、アクションバーのタイトルも消えるので、タイトルのあるウィンドウの左側に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); 

私にnullポインタエラーを与えて、いずれかの動作しなかったことsetActionView

私は、どの機能からでも呼び出すことができる解決策が必要です(開始時に自動同期期間があり、ProgressBarも同様に表示することができます)。その後、静的アイコンに戻すことができます。

私はthis questionで読もうとしましたが、答えが何を意味するのか理解できません。私はそれが言うことをしようとしていたように感じるが、私はそうは思わない。どんな支援も大歓迎です。

編集:sastraxiの提案。

これはこれまでの私のクラスです。しかし、私がしようとすると、参照してください:

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

私はNULLポインタエラーを取得します。 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); 

また、可視性を設定しようとすると、nullポインタが返されます。私の参考文献で何が間違っていますか?代わりにProgressBarにあなたの行動のビュークラスを設定するので

+0

これはsetActionViewでいますが(のMenuItem)findViewById(R.id.main_menu_refreshを)やっている時点で失敗していません。明らかに、MenuItemにActionItemViewをキャストするためのClassCastExceptionがあります。 – Namratha

+0

私はそれを理解しました。私はこれまでの[SO](http://stackoverflow.com/questions/7142722/replacing-an-actionbar-menu-item-icon-with-an-indeterminate-progressbar)の質問を見つけました。そこから、私はGoogle [http://developer.android.com/resources/samples/ActionBarCompat/src/com/example/android/actionbarcompat/ActionBarHelperHoneycomb.html]でこのコードを書いています。それは基本的にその時点でコピーアンドペーストし、完全に動作します。 –

答えて

0

は、など、カスタムLinearLayoutクラスに設定します。

class MyViewItem extends LinearLayout 

addViewProgressBarとそのコンストラクタで子としてImageViewを追加し、これらを設定しますあなたのコードがそれを要求するときに子供の視界はGONEまたはVISIBLEのいずれかになります。

+0

私は理解に問題があります。このカスタムクラスについてもう少し詳しく教えてください。私はメインのポストに、私が問題を抱えていることを示すためにさらに多くを加えました。 –

+0

XMLで完全修飾名を使用する必要があります(例: 'IconSwitcher'だけではなく' com.mydomain.mypackage.IconSwitcher'です。それを試してみましょう。 – sastraxi

+0

いいえ、私はまだnullポインターエラーがあります。これはまた 'IconSwitcher ic =(IconSwitcher)refresh.getActionView();'行にもあります。私がその行をコメントアウトするとエラーは出ませんが、私は明らかに静的アイコンだけの動的ボタンを取得しません。マニフェストにIconSwitcherを宣言する必要はありますか? –

0

は、使用してみてください:

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

(注)この2行:

app:showAsAction="ifRoom" 
    app:actionViewClass="android.widget.ProgressBar" 
0

は、あなたがこのようなあなたのメニュー項目を取得しようとしましたが?

MenuItem item = getToolbar().getMenu().findItem(Menu.FIRST); 
関連する問題