Когда я пытаюсь настроить SearchView, как в документации, я получаю эту ошибку при использовании ActionBarSherlock:
FATAL EXCEPTION: main java.lang.ClassCastException: android.widget.SearchView cannot be cast to com.actionbarsherlock.widget.SearchView at MY_PACKAGE.ACTIVITY.onCreateOptionsMenu(MenuDrawerBase.java:181) at android.support.v4.app.Watson.onCreatePanelMenu(Watson.java:45) at com.actionbarsherlock.ActionBarSherlock.callbackCreateOptionsMenu(ActionBarSherlock.java:559) at com.actionbarsherlock.internal.ActionBarSherlockNative.dispatchCreateOptionsMenu(ActionBarSherlockNative.java:60) at com.actionbarsherlock.app.SherlockFragmentActivity.onCreatePanelMenu(SherlockFragmentActivity.java:165) at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:393) at com.android.internal.policy.impl.PhoneWindow.invalidatePanelMenu(PhoneWindow.java:747) at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:2913) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method)
Мой код такой же, как в примере:
import com.actionbarsherlock.view.*; import com.actionbarsherlock.widget.SearchView; ...... @Override public boolean onCreateOptionsMenu(Menu menu) { getSupportMenuInflater().inflate(R.menu.main, menu); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView)menu.findItem(R.id.action_search).getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setIconifiedByDefault(true); searchView.setSubmitButtonEnabled(true); return true; }
Не нашел описания этого нигде, так спрашивая вас: что это?
Кстати, если я использую import android.widget.SearchView;
Вместо import com.actionbarsherlock.widget.SearchView;
Приложение компилирует и работает с API более 11, но мне оно нужно на версии 10.
Извиняюсь, ребята, но это была моя ошибка.
Помните, какой класс вы ссылаетесь в ресурсе xml. В моем случае это было:
<item android:id="@+id/action_search" android:title="@string/action_search" android:icon="@drawable/action_search_light" android:showAsAction="always|collapseActionView" android:actionViewClass="android.widget.SearchView"/>
И это вызвало ошибку приведения. Изменен actionViewClass для com.actionbarsherlock.widget.SearchView и получил именно то, что ожидало!
Измените файл option_menu.xml
на
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/search" android:title="@string/menu_search" android:icon="@drawable/ic_menu_search" android:showAsAction="collapseActionView|ifRoom" android:actionViewClass="com.actionbarsherlock.widget.SearchView" /> </menu>