Intereting Posts
Запись строки в файл Android: Как добавить R.raw в проект? Этот класс должен быть общедоступным (android.support.v7.internal.widget.ActionBarView.HomeView) Почему AOSP добавляет новые API для поддержки библиотек, не добавляя их в SDK? Просмотр ресайклера вертикального списка прокрутки с горизонтальной прокручиваемой строкой Android AlertDialog с прозрачным фоном Как запустить команду «ионный запуск андроида» на конкретном устройстве? Android CheckJNI для Android: как отключить / включить (на эмуляторе)? Документация кажется ошибочной Создание приложений для Android без Java Отправлять данные в приемник сигналов тревоги Как отобразить диалог прогресса перед началом активности в Android? Панель инструментов CoordinatorLayout невидима для ввода до полной высоты Является ли Apple / Google спецификациями для поддержки iCal в iOS или Android? Плагин Java SIP для Cordova или Phonegap для потоковой передачи аудио и видео Как настроить Visual Studio 2015 с SDL2 для Android, iOS и Windows Development?

Библиотека поддержки 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) 

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

Solutions Collecting From Web of "Библиотека поддержки Android ActionBar не работает в приложении 2.3"

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

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

 <?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); }