2014-07-15 14 views
5

Arama çubuğunda arama görünümü olan bir uygulama geliştirdim ve filtresini mükemmel bir şekilde arama yaptığımda sorun yaşıyorum ancak geri düğmesine bastığımda hala filtre verilerini gösteriyorum. Benim soru, Eylem Çubuğu Arama görünümünün geri düğmesi olayı nedir.Android'de Arama Görünümü'nün geri düğmesi nasıl ele alınır

enter image description here

Arama View

Benim Kod Adaptörü içinde

SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(Menus.SEARCH)); 
    searchView.setQueryHint(this.getString(R.string.search)); 
    editSearch = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); 
    editSearch.setHintTextColor(getResources().getColor(R.color.white)); 
    searchView.setOnQueryTextListener(OnQuerySearchView); 


private OnQueryTextListener OnQuerySearchView = new OnQueryTextListener() { 

    @Override 
    public boolean onQueryTextSubmit(String newText) { 
     if (TextUtils.isEmpty(newText)) { 
      listAllContact.clearTextFilter(); 
     } else { 
      listAllContact.setFilterText(newText.toString()); 
     } 
     return true; 
    } 

    @Override 
    public boolean onQueryTextChange(String newText) { 
     String text = editSearch.getText().toString() 
       .toLowerCase(Locale.getDefault()); 
     adapter.filter(text); 
     return true; 
    } 

}; 

Filtre Yöntemi olduğunu

Bu olduğunca dinleyici ekleyebilirsiniz
public void filter(String charText) { 
    charText = charText.toLowerCase(Locale.getDefault()); 
    propertyList.clear(); 

    if (charText.length() == 0) { 
     propertyList.addAll(arrayList); 
    notifyDataSetChanged(); 

    } else { 
     for (ContactProperty p : arrayList) { 
      if (p.getFriendName().toLowerCase(Locale.getDefault()) 
        .contains(charText)) { 
       propertyList.add(p); 
      } 
     } 
     notifyDataSetChanged(); 

    } 

cevap

8

:

MenuItem searchMenuItem = menu.findItem(R.id.menu_search); 
    searchMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() { 

     @Override 
     public boolean onMenuItemActionExpand(MenuItem item) { 
      // Do whatever you need 
      return true; // KEEP IT TO TRUE OR IT DOESN'T OPEN !! 
     } 

     @Override 
     public boolean onMenuItemActionCollapse(MenuItem item) { 
      // Do whatever you need 
      return true; // OR FALSE IF YOU DIDN'T WANT IT TO CLOSE! 
     } 
    }); 
1

I n isimlilik dosyası

Eylem Çubuğunun geri düğmesi için - Etkinlik bildirimi bölümünün her şeyden önce Ana Etkinliği tanımlaması gerekir.

gibi-

 android:name="com.android.unum.ui.SelfServiceActivity" 
     android:label="@string/self_service" 
     android:parentActivityName="com.android.unum.ui.DashboardActivity" > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.android.unum.ui.DashboardActivity" /> 
aktivitesi içinde

düzenleme onOptionsItemSelected yöntemi şu

NavUtils.navigateUpFromSameTask (bu);

// public static void navigationateUpFromSameTask (Etkinlik kaynağıAktivite) // sourceActivity bu çağrıyla bitecek.

Not: Bu yöntem yalnızca sourceActivity ve karşılık gelen ebeveyn aynı görevde olduğunda kullanılmalıdır. Daha detaylı bilgi için

: -

http://developer.android.com/reference/android/support/v4/app/NavUtils.html

gibi @Override

public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    // Respond to the action bar's Up/Home button 
    case android.R.id.home: 
     NavUtils.navigateUpFromSameTask(this); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
4
Yalnızca menü düzeninde "collapseActionView" ayrıntısını koymak gerekir

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/menu_item_search" 
     android:title="@string/search" 
     android:iconifiedByDefault="true" 
     android:icon="@drawable/ic_action_search" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     app:showAsAction="ifRoom|collapseActionView"/> <--this one 
</menu> 

Bu, tek başına aradığınız işlevi size sağlayacaktır.

3

bu deneyin:

MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.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) { 
      return true; 
     } 
    }); 
0

Bu odağını kaybolduğunda arama eylem öğesi çökecek:

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    getMenuInflater().inflate(R.menu.main_menu, menu); 
    searchItem = menu.findItem(R.id.action_search); 
    searchView = (SearchView) MenuItemCompat.getActionView(searchItem); 

    // be sure to use 'setOnQueryTextFocusChangeListener()' 
    searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() 
    { 
     @Override 
     public void onFocusChange(View v, boolean newViewFocus) 
     { 
      if (!newViewFocus) 
      { 
       //Collapse the action item. 
       searchItem.collapseActionView(); 
       //Clear the filter/search query. 
       myFilterFunction(""); 
      } 
     } 
    }); 

    return super.onCreateOptionsMenu(menu); 
} 

Bu başarıyla arama öğesi eylemi çökmeye bulduk tek yolu Geri düğmesine basarken görüntüle.

İlgili konular