Я только что внедрил v7 AppCompat
библиотеку поддержки, но MenuItemCompat.getActionView
всегда возвращаю ноль в каждой протестированной версии Android (4.2.2, 2.3.4 ....)
SearchView
Отображаются в панели действий , но он не реагирует на прикосновение действия и не расширяется , чтобы показать его EditText
и так же , как простой значок.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
if (searchView != null) {
SearchViewCompat.setOnQueryTextListener(searchView, mOnQueryTextListener);
searchView.setIconifiedByDefault(false);
Log.d(TAG,"SearchView not null");
} else
Log.d(TAG, "SearchView is null");
}
return super.onCreateOptionsMenu(menu);
}
menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/action_search"
app:showAsAction="always|collapseActionView"
android:icon="@drawable/abc_ic_search"
android:title="@string/action_bar_search"
android:actionViewClass="android.support.v7.widget.SearchView"/>
<item android:id="@+id/action_refresh"
android:icon="@drawable/refresh"
android:title="@string/action_bar_refresh"
app:showAsAction="ifRoom"/>
</menu>
android
searchview
android-actionbar-compat
android-search
Мохсен Афшин
источник
источник
android.support.v7.widget.SearchView
класс не следует путать с классом 'android.support.v4.widget.SearchViewCompat' (который известен как распространенная ошибка при использовании библиотеки ActionBarCompat)<menu xmlns:app="http://schemas.android.com/apk/res/android" >
но получаю ошибкуAttribute is missing the Android namespace prefix
. Вы получаете это, и как вы это исправляете?В моем случае это был файл ProGuard. Вам необходимо добавить эту строку:
источник
Для меня неправильный
menu.xml
импорт пространства имен вызвал эту проблему.Мой оригинал
menu.xml
:Похоже, что
xmlns:app="http://schemas.android.com/tools"
заставлялMenuItemCompat.getActionView()
вернутьсяnull
. Изменение этого импорта, чтобыxmlns:app="http://schemas.android.com/apk/res-auto"
исправить проблему.Новая работа
menu.xml
:источник
Я думаю, что проблема в том, что вы используете SearchView из пакета Support V7, и, возможно, ваш уровень API установлен на ..... 22 ??.
Чтобы исправить проблему, измените код на следующее:
menu.xml
источник
Я был с той же ошибкой, мой метод
getActionView()
всегда возвращал ноль. Итак, я сделал следующие вещи:В некоторых сообщениях я видел, что люди используют app: или yourapp, но я использовал их нормально
android:ActionVewClass
.По моему
onCreateOptionsMenu
методу:И не забудьте поставить в
onCreate
методе:Это работает очень хорошо для моей деятельности, "расширяющейся" для
FragmentActivity
иActionBarActivity
.источник
Ответ Мохсена Афшина выше был моей отправной точкой, и я сделал несколько настроек, чтобы заставить его работать с моей установкой:
menu.xml
источник
У меня был тот же код, но вместо того, чтобы использовать импорт, который
android.support.v7.widget.SearchView;
я использовалimport android.widget.SearchView;
. Это исправило мою проблему соnull
значением. Так что просто измените этот код в поисковой активности, и он будет работать, а также поменять пространство имен в XML-файле.источник
Вот фрагмент того, как обрабатывать searchView из библиотеки поддержки v7:
Также, если вы используете Proguard, добавьте это в его конфигурацию:
источник
У меня была очень похожая проблема с той разницей, что я пытался использовать класс, который
android.widget.ImageView
Если вы используете ProGuard, вам нужно указать, чтобы разрешить методы, используемые в этом классе.
http://proguard.sourceforge.net/manual/examples.html
Это говорит: «Разрешить все необходимые конструкторы, которые могут быть вызваны из xml, и разрешить любые пользовательские сеттеры, которые он также использует (добавьте больше по мере необходимости)»
источник
Я сделал это вручную, установленным в коде Java:
Файл макета:
Тогда в коде Java:
источник
Удалить код: открытый класс DemoActivity расширяет ActionBarActivity
Заменить на: открытый класс DemoActivity расширяет активность
источник