2016-05-04 21 views
10

Arama sonuçlarını görüntülemenin yanı sıra, Arama Görünümü'nü görüntülemek için tek bir etkinlik kullanıyorum. Arama sonuçları öğelerin yalnızca bir alt kümesidir, bu nedenle arama bir filtre görevi görür. Her şey iyi çalışıyor gibi görünüyor, ancak ViewView'ın bir geri düğmesi tıklandığında görünümdeki tüm öğelerin nasıl geri yükleneceğini anlayamıyorum. Veya bir kullanıcının arama sonuçlarından önceki görünüme (benim durumumda aynı görünümdeyken) gidip gelmediğini algılamanın başka bir yolu da olabilir.SearchView'ın geri düğmesi nasıl algılanır?

Teşekkür

+0

burada bir göz http://stackoverflow.com/questions/25842555/how-to-handle-back-button-of-search-view atın -in-android –

+1

Matei Radu, th3pat3I cevap üzerinde genişletme de dahil olmak üzere gereken tüm bilgileri sağlayan bağlantı için teşekkürler. – bdristan

+1

@bdristan Cevabımı güncelledikten sonra, @MateiRadu'nun 'SearchView''ü açmak/kapatmak için doğru cevabı size sağladığını görüyorum. Ancak umarım cevabım hala biraz daha çalışmamasının nedenini açıkladığından yardımcı olur :-) – Darwind

cevap

24

Yani sorunuza başlığı bakarak, sen SearchView kapatılıyor algılamak nasıl emin değiliz ve dolayısıyla size "normal" durumuna ne zaman görüşlerinizi geri veremiyoruz SearchView artık açık değil. Bu gibi, SearchView için SearchView.OnCloseListener: (basit) çözümü

Android 4.0+ itibariyle

Eski çözümü eklemektir

SearchView.setOnCloseListener(new SearchView.OnCloseListener() { 
    @Override 
    public boolean onClose() { 
     // This is where you can be notified when the `SearchView` is closed 
     // and change your views you see fit. 
    } 
}); 

DÜZENLEME:

Android 4.0+

01 çalışır Güncelleme çözüm

Görünüşe OnCloseListener arabası ve Android'in daha yeni sürümlerinde çalışmaz (4.0+). Bkz: https://code.google.com/p/android/issues/detail?id=25758

bu çözüm SearchView Destek kütüphane sürümünü kullanmaktır:

Benim onCreateOptionsMenu şuna benzer: Google değil bile rahatsız yazmak için niçin gelince

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu, menu); 

    MenuItem searchMenuItem = menu.findItem(R.id.searchView); 
    SearchView searchView = (SearchView) searchMenuItem.getActionView(); 

    MenuItemCompat.setOnActionExpandListener(searchMenuItem, new MenuItemCompat.OnActionExpandListener() { 
     @Override 
     public boolean onMenuItemActionExpand(MenuItem item) { 
      Toast.makeText(ScrollingActivity.this, "onMenuItemActionExpand called", Toast.LENGTH_SHORT).show(); 
      return true; 
     } 

     @Override 
     public boolean onMenuItemActionCollapse(MenuItem item) { 
      Toast.makeText(ScrollingActivity.this, "onMenutItemActionCollapse called", Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
    }); 
} 

Bilmediğim belgelerdeki bir yorum, ama üzücü.

EDIT2: Bu aynı zamanda yerine OnCloseListener ait OnActionExpandListener nasıl kullanılacağını gösterir

how to handle back button of Search View in android

:

Hemen yorumlarda eklendi @MateiRadu bağlantı ekleyerek.

Bu yardımcı olur umarım.

+0

şey kaçırdığınızı hissediyorum. Ancak, th3pat3l tarafından önerildiği gibi onQueryTextSubmit() ve onQueryTextChange() - çağrısı alın. İdeal olarak üç dinleyicinin tümünü kullanmak isterim. – bdristan

+0

@bdristan Cevabımı güncelledim. – Darwind

+0

Kendi SearchView özel sınıf kullanımını varsa: onActionViewCollapsed kamu boşluğu (@Override) { super.onActionViewCollapsed(); } – Mike6679

4

Darwind'in cevabı işi yapacak, ancak yalnızca kullanıcı klavyeyi kapatmak için arka tuşa bastığında ve SearchView artık odağa sahip olmadığında çalışır.

Bunu yapmanın daha iyi yolu, SearchView 'in metin değişikliklerini dinlemektir. Eğer görüşlerini geri ve metin güncelliyor olarak UI kontrol edebilirsiniz
Bu şekilde.
İşte ben bunu yapıyorum.

SearchView searchView = new SearchView(context); 
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
    @Override 
    public boolean onQueryTextSubmit(String query) { 
     // this is when user is done typing and clicks search 
     return false; 
    } 

    @Override 
    public boolean onQueryTextChange(String newText) { 
     // you can use this to do a "live" search while the user is typing. 
     // this will trigger each time user changes (adds or removes) text 
     // so when newText is empty, restore your views 
     return false; 
    } 
}); 
0

bir başka hile vardır:

searchView.setOnSearchViewListener(new MaterialSearchView.SearchViewListener() { 
       @Override 
       public void onSearchViewShown() { 
        if(!txtToolbarTitle.getText().toString().isEmpty()){ 
         searchView.setQuery(txtToolbarTitle.getText().toString()+ " ", false); 
        } 
       } 

       @Override 
       public void onSearchViewClosed() { 
        if(txtToolbarTitle.getText().toString().isEmpty()){ 
         finish(); 
        } 
       } 
      }); 
İlgili konular