На андроиде 4.0.3, если вызвать MenuItem.setActionView(null)
, а затем повернуть экран, у меня приложение вылетит.
Я пытаюсь эмулировать actionbar
приложения GMail, где, если щелкнуть элемент, он превращается в progress bar
.
Однако теперь он сохраняет состояние 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>