1

SituationAndroid Suche deaktivieren Vollbild funktioniert nicht nach dem Vorschlag der Auswahl

ich eine Suche in meiner Symbolleiste habe, die Vorschläge für den Benutzer angezeigt wird, wenn sie in der Suche eingeben. In der Querformat-Orientierung funktioniert zunächst alles mit der angezeigten Softkey-Tastatur und der sichtbaren Sucher-Ansicht. Nachdem der Benutzer einen Vorschlag auswählt und eine zweite Suche durchführt, befindet sich die Suchoberfläche nun im Vollbildmodus, wo die Suchansicht verdeckt ist und Vorschläge nicht angezeigt werden.

Problem

Wie kann ich konsequent keine Vollbild erhalten, egal wie oft die Suchfunktion verwendet wird?

Dinge, die ich habe versucht,

ImeOptions - flagNoFullscreen, flagNoExtractUi

-Code

MainFragment

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.favorites, menu); 

    MenuItem toggleItem = menu.findItem(R.id.toggle_shake); 
    setUpToggleShake(toggleItem); 

    MenuItem singleSearchItem = menu.findItem(R.id.search_restaurant); 
    setUpSingleSearch(menu, singleSearchItem); 
} 

private void setUpSingleSearch(final Menu menu, final MenuItem singleSearchItem) { 
    searchView = (SearchView) MenuItemCompat.getActionView(singleSearchItem); 
    searchView.setQueryHint("Search Restaurant"); 
    searchView.setMaxWidth(10000); 
    searchView.setImeOptions(searchView.getImeOptions() | EditorInfo.IME_FLAG_NO_FULLSCREEN | 
     EditorInfo.IME_FLAG_NO_EXTRACT_UI); 
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      displaySuggestions(newText); 
      return false; 
     } 
    }); 
    searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() { 
     @Override 
     public boolean onSuggestionSelect(int position) { 
      return false; 
     } 

     @Override 
     public boolean onSuggestionClick(int position) { 
      MatrixCursor cursor = (MatrixCursor)(searchView.getSuggestionsAdapter() 
        .getCursor()); 
      if (cursor.moveToPosition(position)) { 
       String restaurantId = cursor.getString(cursor.getColumnIndex(
         RestaurantTable.Cols.ID)); 
       mFavoritesRestaurantListAdapter.setSingleSearchRestaurant(restaurantId); 
       mFavoritesRestaurantListAdapter.onSingleSearch(); 
      } 
      searchView.clearFocus(); 
      searchView.onActionViewCollapsed(); 
      setItemsVisibility(menu, singleSearchItem, true); 

      return false; 
     } 
    }); 
    searchView.setOnSearchClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      setItemsVisibility(menu, singleSearchItem, false); 
      searchView.setFocusable(true); 
      searchView.requestFocus(); 
      searchView.requestFocusFromTouch(); 
     } 
    }); 
    searchView.setOnCloseListener(new SearchView.OnCloseListener() { 
     @Override 
     public boolean onClose() { 
      setItemsVisibility(menu, singleSearchItem, true); 
      searchView.clearFocus(); 
      return false; 
     } 
    }); 
    final AutoCompleteTextView searchAutoCompleteTextView = (AutoCompleteTextView) searchView 
      .findViewById(R.id.search_src_text); 
    searchAutoCompleteTextView.setThreshold(1); 
} 
+0

Nur um zu klären. Sie drücken die Suche -> Suchleiste ist erweitert -> Sie geben Abfrage ein -> Sie wählen vorgeschlagenes Element -> Suchleiste ist ausgeblendet und Tastatur ist weg -> drücken Sie die Suche noch einmal -> Sie sehen großes weißes Textfeld oben und Tastatur auf Unterseite. Habe ich recht? – Andrew

+0

Ja, das ist die Situation. –

Antwort

1

Das Problem der Aufruf von Search des onActionViewCollapsed zu sein scheint. Ich habe einen Workaround durch Hinzufügen von collapseActionView in menu.xml durchgeführt.

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

Dann searchview.onActionViewCollapsed entfernen. Fügen Sie stattdessen menuItem.collapseActionView hinzu.

searchView.clearFocus(); 
//searchView.onActionViewCollapsed(); 
menuItem.collapseActionView(); //Added this 
setItemsVisibility(menu, singleSearchItem, true); 
1

Versuchen Sie, die Dinge einfach zu halten. Ich meine, warum benutzt du all das requestFocus, clearFocus usw. Ich habe gerade eine sehr einfache Implementierung Ihrer Aufgabe erstellt und alles funktioniert wie ein Zauber. Schau es dir an:

import android.database.Cursor; 
import android.database.MatrixCursor; 
import android.os.Bundle; 
import android.provider.BaseColumns; 
import android.support.v4.view.MenuItemCompat; 
import android.support.v4.widget.SimpleCursorAdapter; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.SearchView; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.TextView; 

public class SearchableActivity extends AppCompatActivity { 

    private TextView selectedValueTextView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_searchable); 
     selectedValueTextView = (TextView) findViewById(R.id.selected_value); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_with_search, menu); 
     final MenuItem searchMenuItem = menu.findItem(R.id.action_search); 
     final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem); 
     searchView.setSuggestionsAdapter(new SimpleCursorAdapter(
       this, 
       android.R.layout.simple_list_item_1, 
       null, 
       new String[]{"value"}, 
       new int[]{android.R.id.text1}, 
       0 
     )); 
     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String query) { 
       return false; 
      } 
      @Override 
      public boolean onQueryTextChange(String query) { 
       MatrixCursor cursor = new MatrixCursor(new String[]{BaseColumns._ID, "value"}); 
       for (int i = 0; i < 10; i++) { 
        cursor.addRow(new Object[]{i, query + i}); 
       } 
       searchView.getSuggestionsAdapter().changeCursor(cursor); 
       return true; 
      } 
     }); 
     searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() { 
      @Override 
      public boolean onSuggestionSelect(int position) { 
       return false; 
      } 
      @Override 
      public boolean onSuggestionClick(int position) { 
       Cursor cursor = (Cursor) searchView.getSuggestionsAdapter().getItem(position); 
       selectedValueTextView.setText(cursor.getString(cursor.getColumnIndex("value"))); 
       // do this last because collapseActionView calls onQueryTextChange("") 
       // which changes cursor data 
       searchMenuItem.collapseActionView(); 
       return false; 
      } 
     }); 
     return true; 

    } 
}