2017-07-01 1 views
0

J'ai une searchView dans la barre d'outils comme un menu d'options.item.getActionview() donne toujours null

Chaque fois que j'essaie de mettre en setOnQueryTextListener il me donne un NullPointerException:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater menuInflater = getMenuInflater(); 
    menuInflater.inflate(R.menu.menu, menu); 
    MenuItem item = menu.findItem(R.id.search); 
    SearchView searchView = (SearchView) item.getActionView(); //searchView: null item: "Search" 
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { //searchView: null 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      newText = newText.toLowerCase(); 
      ArrayList<Note> newNotes = new ArrayList<>(); 
      for(Note note: notes){ 
       String name = note.getTitle().toLowerCase(); 
       if(name.contains(newText)){ 
        newNotes.add(note); 
       } 
      } 
      noteListAdapter.setFilter(newNotes); 
      return true; 
     } 
    }); 
    return true; 
} 

choses que je l'ai déjà fait et ne fonctionne pas:

ajoutant -keep class android.support.v7.widget.SearchView { *; } au fichier Proguard.

Implémentation de SearchView.OnQueryTextListener sur ma classe Java.

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/search" 
     android:title="Search" 
     android:icon="@mipmap/search" 
     app:showAsAction="always|collapseActionView" 
     app:actionViewClass="android:support.v7.widget.SearchView"/> 

    <item 
     android:id="@+id/share" 
     android:title="Share" 
     android:icon="@mipmap/share" 
     app:showAsAction="ifRoom"/> 

</menu> 

Répondre

1

Vous avez une faute de frappe, il devrait être android.support pas android:support

donc utiliser

<item 
     android:id="@+id/search" 
     android:title="Search" 
     android:icon="@mipmap/search" 
     app:showAsAction="always|collapseActionView" 
     app:actionViewClass="android.support.v7.widget.SearchView"/> 
1

VOUS FAITES CE

SearchView search = (SearchView) findItem(R.id.search).getActionView(); 

S'IL VOUS PLAÎT CE FAIRE

SearchView search = (SearchView) menu.findItem(R.id.search).getActionView(); 

<item 
     android:id="@+id/search" 
     android:title="Search" 
     android:icon="@mipmap/search" 
     app:showAsAction="always|collapseActionView" 
     app:actionViewClass="android.support.v7.widget.SearchView"/> 
+0

Je l'ai essayé aussi bien mais il me donne encore NullPointerException sur SearchView –

+0

je peux voir clairement dans le code OP 'menu.findItem (R.id.search)', ne peut pas voir la ligne dont vous parlez dans votre réponse –