MenuItemCompat.getActionView gibt immer null zurück
Ich nur implementiert, die v7 AppCompat
- support-Bibliothek, aber die MenuItemCompat.getActionView
immer wieder null in jeder Android-version, die ich getestet habe (4.2.2, 2.3.4 ....)
Den SearchView
angezeigt wird in der action-bar, aber es reagiert nicht auf touch-Aktionen und-nicht zu erweitern, um zu zeigen, seine EditText
und wird ebenso wie ein einfaches Symbol.
@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>
InformationsquelleAutor der Frage Mohsen Afshin | 2013-08-26
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Endlich habe ich die Lösung gefunden.
Ändern namespace
actionViewClass
ausandroid:actionViewClass
zuapp:actionViewClass
Umsetzung
android.support.v7.widget.SearchView.OnQueryTextListener
- Schnittstelle für die aktuelle Aktivität.Direkt verwenden
setOnQueryTextListener
stattSearchViewCompat.setOnQueryTextListener
InformationsquelleAutor der Antwort Mohsen Afshin
In meinem Fall war es ProGuard-Datei. Sie müssen die folgende Zeile hinzufügen:
InformationsquelleAutor der Antwort Ivan Vazhnov
Für mich, eine falsche
menu.xml
namespace importieren, die dieses problem verursacht.Meine ursprüngliche
menu.xml
:Sieht es aus wie die
xmlns:app="http://schemas.android.com/tools"
verursacht wurdeMenuItemCompat.getActionView()
zurücknull
. Ändern Sie diese importieren, umxmlns:app="http://schemas.android.com/apk/res-auto"
das problem behoben.Neue arbeiten
menu.xml
:InformationsquelleAutor der Antwort Sean Barbeau
Ich denke, dass das problem ist, dass Sie die SearchView von der Support-V7-Paket und vielleicht deine API-Ebene.....22??.
Ändern Sie Ihren code wie folgt, um das problem zu beheben:
menu.xml
InformationsquelleAutor der Antwort Michele Caggiano
War ich mit dem gleichen Fehler, meine Methode
getActionView()
war immer null zurückgeben. So, ich habe die folgenden Dinge:Sah ich in manchen posts, dass die Menschen sind mit der app: oder yourapp, aber ich habe normalerweise
android:ActionVewClass
.Auf meine
onCreateOptionsMenu
Methode:Und vergessen Sie nicht, um in die
onCreate
Methode:Dieser funktioniert sehr gut für meine Tätigkeit "Erweiterung" für
FragmentActivity
undActionBarActivity
.InformationsquelleAutor der Antwort Franzé Jr.
Mohsen Afshin Antwort oben war mein Ausgangspunkt, und ich habe einige tweaks zu bekommen, es funktioniert mit meinem setup:
menu.xml
InformationsquelleAutor der Antwort kasiahayden
Hatte ich den gleichen code, aber anstatt die import
android.support.v7.widget.SearchView;
ich war mitimport android.widget.SearchView;
. Diese Feste mein problem mit dernull
Wert.So einfach ändern Sie den code in Ihre Suche Aktivität, und es wird funktionieren, und auch ändern Sie den namespace in der xml-Datei.
InformationsquelleAutor der Antwort marcelocolombo
Hier ein snippet wie man mit den searchView von support library v7 :
Auch, wenn Sie Proguard, fügen Sie diese auf Ihre Konfiguration :
InformationsquelleAutor der Antwort android developer
Ich hatte ein sehr ähnliches Problem mit dem Unterschied, ich war versucht, eine Klasse, die erweiterten
android.widget.ImageView
Wenn Sie mit ProGuard, müssen Sie angeben, erlauben die Methoden in dieser Klasse.
http://proguard.sourceforge.net/manual/examples.html
Dieser sagt, dass alle benötigten Konstruktoren, die aufgerufen werden könnten von xml und ermöglichen einen beliebigen benutzerdefinierten setter verwendet es als gut (fügen Sie mehr als nötig)"
InformationsquelleAutor der Antwort ElliotM
Code entfernen:
public class DemoActivity erstreckt ActionBarActivity
Ersetzen durch:
public class DemoActivity erstreckt Aktivität
InformationsquelleAutor der Antwort Hieu