Ich habe gerade die v7 AppCompat
Support-Bibliothek implementiert, aber dieMenuItemCompat.getActionView
in jeder von mir getesteten Android-Version (4.2.2, 2.3.4 ....) wird immer null zurückgegeben.
Das SearchView
wird in der Aktionsleiste angezeigt, reagiert jedoch nicht auf Berührungsaktionen und wird nicht erweitert, um es anzuzeigenEditText
ist 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>
android
searchview
android-actionbar-compat
android-search
Mohsen Afshin
quelle
quelle
android.support.v7.widget.SearchView
Ich muss sagen, dass die Klasse nicht mit der Klasse 'android.support.v4.widget.SearchViewCompat' verwechselt werden sollte (was als häufiger Fehler bei der Verwendung der ActionBarCompat-Bibliothek bekannt ist)<menu xmlns:app="http://schemas.android.com/apk/res/android" >
, erhalte aber eine FehlermeldungAttribute is missing the Android namespace prefix
. Bekommst du es und wie reparierst du es?In meinem Fall war es eine ProGuard-Datei. Sie müssen diese Zeile hinzufügen:
quelle
Für mich hat ein falscher
menu.xml
Namespace-Import dieses Problem verursacht.Mein Original
menu.xml
:Es sieht
xmlns:app="http://schemas.android.com/tools"
so ausMenuItemCompat.getActionView()
, als würde der zurückkehrennull
. Durch Ändern dieses Imports wurdexmlns:app="http://schemas.android.com/apk/res-auto"
das Problem behoben.Neue Arbeitsweise
menu.xml
:quelle
Ich denke, dass das Problem darin besteht, dass Sie SearchView aus dem Support V7-Paket verwenden und möglicherweise Ihre API-Ebene auf ..... 22 ?? eingestellt ist.
Ändern Sie Ihren Code wie folgt, um das Problem zu beheben:
menu.xml
quelle
Ich hatte den gleichen Fehler, meine Methode
getActionView()
gab immer null zurück. Also habe ich folgende Dinge gemacht:Ich habe in einigen Posts gesehen, dass die Leute App verwenden: oder yourapp, aber ich habe normal verwendet
android:ActionVewClass
.Zu meiner
onCreateOptionsMenu
Methode:Und vergessen Sie nicht, die
onCreate
Methode einzugeben:Dies funktioniert sehr gut für meine Aktivität "Erweitern" für
FragmentActivity
undActionBarActivity
.quelle
Die Antwort von Mohsen Afshin oben war mein Ausgangspunkt und ich habe einige Verbesserungen vorgenommen, damit es mit meinem Setup funktioniert:
menu.xml
quelle
Ich hatte den gleichen Code, aber anstatt den Import zu verwenden, den
android.support.v7.widget.SearchView;
ich verwendet habeimport android.widget.SearchView;
. Dies hat mein Problem mit demnull
Wert behoben . Ändern Sie einfach diesen Code in Ihrer Suchaktivität und er funktioniert und ändert auch den Namespace in der XML-Datei.quelle
Hier ist ein Ausschnitt aus der Handhabung von searchView aus der Support Library v7:
Wenn Sie Proguard verwenden, fügen Sie dies zu seiner Konfiguration hinzu:
quelle
Ich hatte ein sehr ähnliches Problem mit dem Unterschied, dass ich versuchte, eine erweiterte Klasse zu verwenden
android.widget.ImageView
Wenn Sie ProGuard verwenden, müssen Sie angeben, um die an dieser Klasse beteiligten Methoden zuzulassen.
http://proguard.sourceforge.net/manual/examples.html
Dies besagt: "Erlaube allen benötigten Konstruktoren, die von XML aufgerufen werden könnten, und erlaube auch alle benutzerdefinierten Setter, die es verwendet (füge nach Bedarf weitere hinzu)."
quelle
Ich habe dies durch manuelles Einstellen in Java-Code getan:
Layoutdatei:
Dann im Java-Code:
quelle
Entfernen Sie den Code ein : public class DemoActivity erstreckt ActionBarActivity
Ersetzen durch: public class DemoActivity erweitert Activity
quelle