android 4.0.3 MenuItem.setActionView(null)
に電話して画面を回転すると、アプリケーションがクラッシュします。私がやろうとしています何Android MenuItem setActionView(null)クラッシュ
は、あなたがそれをprogress bar
に変身アイテムをクリックした場合GMailのアプリのactionbar
をエミュレートしています。
しかし、今度はActionView
の状態を保存し、復元しようとすると、これが表示されます。
活動ComponentInfoを開始することができません{}: とjava.lang.ClassCastException:android.view.AbsSavedState $ 1は誰でも動作するコードを持っていますandroid.widget.ProgressBar $ SavedState
に キャストすることはできませんこのため?またはそれを修正する方法は?
私はactionbarsherlock
を使用します。それは、4.03にあるので、単にすべてのシステムコールを呼び出すべきではありません。
コード:
OnCreate()
refreshMenuActionView = new ProgressBar(this.getActivity());
refreshMenuActionView.setIndeterminateDrawable(this.getActivity().getResources().getDrawable(R.drawable.refresh_spinner));
AsyncTask.onPostExecute
if (refreshMenuItem != null) {
refreshMenuItem.setActionView(null);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.loadable_menu, menu);
refreshMenuItem = menu.findItem(R.id.refreshMenuItem);
if (downloader != null && downloader.getStatus() == AsyncTask.Status.RUNNING) {
refreshMenuItem.setActionView(refreshMenuActionView);
}
searchMenuItem = menu.findItem(R.id.searchMenuItem);
super.onCreateOptionsMenu(menu, inflater);
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/refreshMenuItem"
android:title="@string/refresh_item_title"
android:icon="@drawable/ic_menu_refresh"
android:showAsAction="ifRoom" />
<item
android:id="@+id/searchMenuItem"
android:title="@string/search_item_title"
android:icon="@drawable/ic_menu_search"
android:showAsAction="always" />
</menu>
追加されたコードとxml。 – Buttink