Je viens d'implémenter la v7 AppCompat
bibliothèque de support mais le MenuItemCompat.getActionView
retourne toujours null dans chaque version d'Android que j'ai testée (4.2.2, 2.3.4 ....)
Le SearchView
est affiché dans la barre d'actions mais il ne répond pas aux actions tactiles et ne se développe pas pour l'afficher EditText
et ressemble à une simple icône.
@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
la source
la source
android.support.v7.widget.SearchView
classe ne doit pas être confondue avec la classe 'android.support.v4.widget.SearchViewCompat' (qui est connue comme une erreur courante lors de l'utilisation de la bibliothèque ActionBarCompat)<menu xmlns:app="http://schemas.android.com/apk/res/android" >
mais j'obtiens une erreurAttribute is missing the Android namespace prefix
. Comprenez-vous et comment y remédier?Dans mon cas, c'était le fichier ProGuard. Vous devez ajouter cette ligne:
la source
Pour moi, une erreur
menu.xml
importation d'espace de noms causé ce problème.Mon original
menu.xml
:On dirait que le
xmlns:app="http://schemas.android.com/tools"
faisaitMenuItemCompat.getActionView()
revenirnull
. Changer cette importation enxmlns:app="http://schemas.android.com/apk/res-auto"
résoudre le problème.Nouveau travail
menu.xml
:la source
Je pense que le problème est que vous utilisez le SearchView du package Support V7 et que votre niveau d'API est peut-être défini sur ..... 22 ??.
Changez votre code comme suit afin de résoudre le problème:
menu.xml
la source
J'étais avec la même erreur, ma méthode
getActionView()
retournait toujours null. Donc, j'ai fait les choses suivantes:J'ai vu dans certains articles que les gens utilisent app: ou yourapp, mais je l'ai utilisé normalement
android:ActionVewClass
.Sur ma
onCreateOptionsMenu
méthode:Et n'oubliez pas de mettre dans la
onCreate
méthode:Cela fonctionne très bien pour mon activité "extension" pour
FragmentActivity
etActionBarActivity
.la source
La réponse de Mohsen Afshin ci-dessus était mon point de départ et j'ai fait quelques ajustements pour le faire fonctionner avec ma configuration:
menu.xml
la source
J'avais le même code, mais au lieu d'utiliser l'importation que
android.support.v7.widget.SearchView;
j'utilisaisimport android.widget.SearchView;
. Cela a résolu mon problème avec lanull
valeur. Alors changez simplement ce code dans votre activité de recherche et cela fonctionnera et changera également l'espace de noms dans le fichier xml.la source
Voici un extrait de la façon de gérer le searchView à partir de la bibliothèque de support v7:
De plus, si vous utilisez Proguard, ajoutez ceci à sa configuration:
la source
J'ai eu un problème très similaire, la différence étant que j'essayais d'utiliser une classe qui s'étendait
android.widget.ImageView
Si vous utilisez ProGuard, vous devez spécifier d'autoriser les méthodes impliquées dans cette classe.
http://proguard.sourceforge.net/manual/examples.html
Cela dit: "Autoriser tous les constructeurs nécessaires qui pourraient être appelés à partir de xml et autoriser tous les setters personnalisés qu'il utilise également (ajoutez-en plus si nécessaire)"
la source
Je l'ai fait par le manuel défini dans le code java:
Fichier de mise en page:
Puis en code java:
la source
Supprimer le code: la classe publique DemoActivity étend ActionBarActivity
Remplacer par: la classe publique DemoActivity étend l' activité
la source