2017-04-22 4 views
0

Ich habe eine Suchschaltfläche in einem Fragment, aber es gibt auch ein anderes Symbol in der Aktionsleiste. Wenn ich auf Suche drücke, wird das andere Symbol immer noch angezeigt:/Wie kann die Suche auf die volle Länge erweitert werden und andere Symbole nicht angezeigt werden?

Ich habe einige andere Lösungen hier gepostet, aber keiner von ihnen scheint für ein Fragment zu arbeiten.

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu_search, menu); 
    SearchView searchView = (SearchView)menu.findItem(R.id.menu_search).getActionView(); 
    searchView.setMaxWidth(Integer.MAX_VALUE); 

Hat überhaupt denken

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

nicht arbeitet ich dies der richtige Ansatz ist, wie es dann einen Pfeil zurück zeigt, und ich kann durch Drücken der Taste zurück, um die Suche abzubrechen. Aber meine anderen Symbole sind immer noch da, sie sind nur auf der rechten Seite platziert. Die App stürzte ab, wenn ich etwas eintippte und die Taste gedrückt wurde.

searchView.setOnQueryTextListener(this); 
     searchView.setOnSearchClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // Hide other option item 
       if (menu != null) { 
        menu.findItem(R.id.action_sort).setVisible(false); 
       } 
      } 
     }); 

     searchView.setOnCloseListener(new SearchView.OnCloseListener() { 
      @Override 
      public boolean onClose() { 
       // Show other option item 
       if (menu != null) { 
        menu.findItem(R.id.action_sort).setVisible(true); 
        return true; 
       } 
       return true; 
      } 
     }); 
+1

Post Code, was Sie bisher versucht haben? – FAT

+0

Fertig! Die zweite Sache funktioniert tatsächlich viel besser, aber ich kann immer noch nicht die anderen Tasten halten. Sie nehmen zu viel Platz ein und stürzen ab, wenn ich sie drücke. – newToEverything

Antwort

1

Sie können mit searchClick und close Zuhörer show/hide andere option Artikel programmatisch:

MenuItemCompat.getActionView(searchItem).addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { 

      @Override 
      public void onViewDetachedFromWindow(View arg0) { 
       // search was detached/closed 
      } 

      @Override 
      public void onViewAttachedToWindow(View arg0) { 
       // search was opened 
      } 
     }); 

Hier ist der onClose Zuhörer genannt wird nie nur:

überhaupt Dies gilt nicht aufgerufen.

Um dies zu tun, aktualisieren Sie Ihre onCreateOptionsMenu wie folgt:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu_search, menu); 
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); 

    searchView.setOnSearchClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // Hide other option item 
      if (menu != null) { 
       menu.findItem(R.id.action_other).setVisible(false); 
      } 
     } 
    }); 

    searchView.setOnCloseListener(new SearchView.OnCloseListener() { 
     @Override 
     public boolean onClose() { 
      // Show other option item 
      if (menu != null) { 
       menu.findItem(R.id.action_other).setVisible(true); 
      } 
      return false; 
     } 
    }); 

    return true; 
} 

Ofcourse, Sie sollten Attribué verwenden app:showAsAction="always|collapseActionView" zu Ihrem action_search Artikel in menu_search.xml

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

    <item 
     android:id="@+id/action_other" 
     android:icon="@drawable/ic_other" 
     android:title="Other" 
     app:showAsAction="always"/> 

</menu> 

UPDATE:

Versuchen MenuItemCompat.setOnActionExpandListener() mit:

MenuItemCompat.setOnActionExpandListener(menuItem, new OnActionExpandListener() { 
    @Override 
    public boolean onMenuItemActionCollapse(MenuItem item) { 
     // Do something when collapsed 
     return true; // Return true to collapse action view 
    } 

    @Override 
    public boolean onMenuItemActionExpand(MenuItem item) { 
     // Do something when expanded 
     return true; // Return true to expand action view 
    } 
}); 

Hope this helfen ~

+0

Großartig, das funktioniert! Kannst du erklären, was passiert, wenn ich in der onClose-Funktion true of false zurückgebe? – newToEverything

+0

Geben Sie true zurück, wenn Sie das Standardverhalten des Löschens des Textfelds außer Kraft setzen möchten, andernfalls false. Siehe Dokumentation: https://developer.android.com/reference/android/widget/SearchView.OnCloseListener.html – FAT

+0

Entschuldigen Sie, dass ich Sie wieder belästigt habe, aber ich habe gerade bemerkt, dass das Symbol nicht wieder erscheint. Ich habe meine Frage aktualisiert. – newToEverything

Verwandte Themen