Библиотека поддержки Android ActionBar не работает в приложении 2.3

Привет друзья, я реализовал поддержку ActionBar Library с v7 Appcompact. Я расширяю свой класс Activity с помощью ActionBarActivity. Ниже мой главный класс

import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); MenuItem menuItem=menu.findItem(R.id.menu_settings); SearchView mSearchView=(SearchView)menuItem.getActionView(); return super.onCreateOptionsMenu(menu); } } 

В файле манифеста я объявляю тип темы следующим образом:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.appcompactdemo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.appcompactdemo.MainActivity" android:label="@string/app_name" android:theme="@style/Theme.AppCompat.Light.DarkActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> 

В стиле.xml, как показано ниже:

 <style name="ExampleTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="homeAsUpIndicator">@drawable/new_indicator</item> <item name="android:homeAsUpIndicator">@drawable/new_indicator</item> </style> 

Над кодом работает отлично с Android версии 4.0, но в версии 2.3 он не работает, он дает ошибку, например:

 java.lang.NoSuchMethodError: android.view.MenuItem.getActionView 07-26 04:11:40.900: E/AndroidRuntime(412): at com.example.appcompactdemo.MainActivity.onCreateOptionsMenu(MainActivity.java:24) 07-26 04:11:40.900: E/AndroidRuntime(412): at android.app.Activity.onCreatePanelMenu(Activity.java:2158) 07-26 04:11:40.900: E/AndroidRuntime(412): at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:224) 07-26 04:11:40.900: E/AndroidRuntime(412): at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:224) 07-26 04:11:40.900: E/AndroidRuntime(412): at android.support.v7.app.ActionBarActivityDelegateBase$1.run(ActionBarActivityDelegateBase.java:69) 07-26 04:11:40.900: E/AndroidRuntime(412): at android.os.Handler.handleCallback(Handler.java:587) 07-26 04:11:40.900: E/AndroidRuntime(412): at android.os.Handler.dispatchMessage(Handler.java:92) 07-26 04:11:40.900: E/AndroidRuntime(412): at android.os.Looper.loop(Looper.java:130) 07-26 04:11:40.900: E/AndroidRuntime(412): at android.app.ActivityThread.main(ActivityThread.java:3683) 07-26 04:11:40.900: E/AndroidRuntime(412): at java.lang.reflect.Method.invokeNative(Native Method) 07-26 04:11:40.900: E/AndroidRuntime(412): at java.lang.reflect.Method.invoke(Method.java:507) 07-26 04:11:40.900: E/AndroidRuntime(412): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 07-26 04:11:40.900: E/AndroidRuntime(412): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 07-26 04:11:40.900: E/AndroidRuntime(412): at dalvik.system.NativeStart.main(Native Method) 

Итак, любая идея, как я могу ее решить?

Я думаю, что ответ на вашу проблему находится в официальном руководстве разработчиков :

Вы должны объявить виджет поиска

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:yourapp="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/action_search" android:title="@string/action_search" android:icon="@drawable/ic_action_search" yourapp:showAsAction="ifRoom|collapseActionView" yourapp:actionViewClass="android.support.v7.widget.SearchView" /> </menu> 

Если вам нужно настроить вид действия (например, добавить прослушиватели событий), вы можете сделать это во время обратного вызова onCreateOptionsMenu (). Вы можете получить объект вида действия, вызвав статический метод MenuItemCompat.getActionView () и передав ему соответствующий MenuItem. Например, виджет поиска из приведенного выше примера получается следующим образом:

 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_activity_actions, menu); MenuItem searchItem = menu.findItem(R.id.action_search); SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); // <-- change your code to this // Configure the search info and add any event listeners ... return super.onCreateOptionsMenu(menu); }