2012-05-02 13 views
11

Używam widżetu SearchView, aby umożliwić wyszukiwanie w mojej aplikacji. Po pierwszym kliknięciu ikony wyszukiwania, widget SearchView rozwija się w pole wyszukiwania, a strzałka "wstecz" jest wyświetlana obok ikony aplikacji. Po kliknięciu ikony aplikacji pasek akcji powraca do stanu początkowego (bez strzałki "wstecz"), a SearchView powraca do ikony.Resetowanie paska akcji po użyciu SearchView

Teraz problem: po przeprowadzeniu wyszukiwania pasek akcji się nie zmienia, jedynym sposobem na przywrócenie jest kliknięcie ikony aplikacji lub strzałki "wstecz" w telefonie. Niedobrze, ponieważ chcę, aby pasek akcji przeszedł do stanu początkowego po zakończeniu wyszukiwania. Próbowałem SearchView.setIconofied(true) ale są 2 problemy:

  1. Szukaj ikona pojawia się w tym samym miejscu, co w polu edycyjnym (pierwotnie to po prawej stronie).
  2. Pasek akcji nadal wyświetla strzałkę "wstecz".

Myślę, że problem, z którym borykam się wiąże, wynika z odejścia od zwykłego wzorca nawigacyjnego. W moim przypadku wszystko dzieje się w ramach tej samej czynności (wyniki wyszukiwania są wyświetlane w tej samej czynności, w której znajduje się pasek akcji), więc na przykład wykonanie Activity.finish() powoduje jedynie zamknięcie aplikacji.

Jak wyzwalać "powrót o jeden krok" paska akcji? Lub symulować kliknięcie ikony aplikacji?

Odpowiedz

35

Wygląda na to, że ustawiłeś to jako zwijany widok akcji w MenuItem. Możesz wywołać collapseActionView() w tej instancji MenuItem, aby przywrócić ją do stanu zamkniętego.

+0

Chciałabym upvote to więcej niż raz. – dm78

1

metoda collapseActionView() działa tylko z poziomu API 14. Jeśli szukasz wsparcia dla starszych wersji Androida, a następnie należy użyć MenuItemCompat bibliotekę.

Oto moje rozwiązanie, aby zwinąć searchview i przywrócić pasek działań ...

private MenuItem searchMenuItem; 

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    getMenuInflater().inflate(R.menu.main_menu, menu); 
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    searchMenuItem = menu.findItem(R.id.action_search); 
    final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
    searchView.setIconifiedByDefault(false); 

    customizeSearchView(searchView); 

    return super.onCreateOptionsMenu(menu); 
} 




    @Override 
protected void onNewIntent(Intent intent) 
{ 
    setIntent(intent); 

    if (searchMenuItem != null) 
    { 
     if (MenuItemCompat.expandActionView(searchMenuItem)) 
     { 
      MenuItemCompat.collapseActionView(searchMenuItem); 
     } 
     else if (MenuItemCompat.collapseActionView(searchMenuItem)) 
     { 
      MenuItemCompat.expandActionView(searchMenuItem); 
     } 
    } 

    handleIntent(intent); 
} 
Powiązane problemy