2014-07-15 12 views
5

Ho sviluppato un'applicazione che ha la vista di ricerca nella barra delle azioni e ho un problema quando cerco di cercare il suo filtro perfettamente, ma quando sto premendo il pulsante indietro mostra ancora i dati del filtro in modo la mia domanda è qual è l'evento del pulsante Indietro della vista di ricerca della barra delle azioni?Come gestire il pulsante Indietro della vista di ricerca in Android

enter image description here

mio codice di ricerca View è

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; 
    } 

}; 

Filtro Metodo adattatore

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(); 

    } 

risposta

8

È possibile aggiungere listener per questo come:

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 file manifest

Per la gestione del pulsante Indietro della barra delle azioni - La parte relativa alla dichiarazione di attività deve prima di tutto definire Attività padre.

piacerti-

 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" /> 

modifica metodo onOptionsItemSelected questo è all'interno attività

NavUtils.navigateUpFromSameTask (questo);

// public static void navigateUpFromSameTask (Activity sourceActivity) // sourceActivity termina con questa chiamata.

Nota: questo metodo deve essere utilizzato solo quando sourceActivity e il genitore corrispondente si trovano all'interno della stessa attività.

Per maggiori informazioni: -

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

Come

@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

Hai solo bisogno di mettere l'attributo "collapseActionView" nel layout del menu

<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> 

Questo ti darà la funzionalità che cerchi da solo.

3

Prova questo:

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

Questa crollerà l'elemento di azione di ricerca quando si perde la sua attenzione:

@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); 
} 

Questo è l'unico modo che ho trovato per crollare con successo l'azione tema guarda quando premi il pulsante Indietro.

Problemi correlati