2014-10-15 11 views
12

Ich habe eine Aktionsleiste mit einem searchview. Wenn ein Benutzer auf die Suchschaltfläche klickt und die Suchansicht minimiert, zeigt die Aktionsleiste eine Zurück-Schaltfläche auf der linken Seite an.Erkennen eines Klicks auf die Aktionsleiste Zurück-Taste - (OnOptionsItemSelected nicht aufrufen, wenn Sie auf die Aktionsleiste klicken zurück Schaltfläche)

enter image description here

Wie können wir, wenn Benutzer klicken Sie auf diese Schaltfläche Zurück erkennen?

bearbeiten

auf der Antwort basiert ich meine OnOptionsItemSelected überprüft, aber es auch nicht angerufen werden. Dies ist der Code von meinem OnOptionsItemSelected:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    if (item != null && id == android.R.id.home) { 
     if (mNavigationDrawerFragment.isDrawerOpen(Gravity.RIGHT)) { 
      mNavigationDrawerFragment.closeDrawer(Gravity.RIGHT); 
     } else { 
      mNavigationDrawerFragment.openDrawer(Gravity.RIGHT); 

     } 
     return true; 
    } 
    if (id == R.id.action_search) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

http://stackoverflow.com/questions/14437745/how-to-override-action-bar-back-button-in-android – codePG

Antwort

11

Setzen Sie dieses auf onCreateOptionsMenu Methode:

MenuItemCompat.setOnActionExpandListener(menu.findItem(R.id.action_search), new MenuItemCompat.OnActionExpandListener() { 
    @Override 
    public boolean onMenuItemActionExpand(MenuItem item) { 

     return true; 
    } 

    @Override 
    public boolean onMenuItemActionCollapse(MenuItem item) { 

     //DO SOMETHING WHEN THE SEARCHVIEW IS CLOSING 

     return true; 
    } 
}); 
+1

Das hat funktioniert. Vielen Dank!! –

+1

Dies ist jetzt veraltet – iBEK

+0

versuchen Sie dies MenuItem.setOnActionExpandListener (neues MenuItem.OnActionExpandListener() { @ Überschreiben public boolean onMenuItemActionExpand (MenuItem-Element) { return true; } @ Überschreiben public boolean onMenuItemActionCollapse (MenuItem Element) { zurück True; } }); https://developer.android.com/reference/android/view/MenuItem.OnActionExpandListener.html –

2

Nur überschreiben unten Methode.

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
      switch (item.getItemId()) { 
      case android.R.id.home: 
      //do whatever you want to do here. 

      } 
      return true; 
    } 
+3

I hat es überschrieben, aber es wird nicht ausgelöst, wenn ich auf die Zurück-Schaltfläche klicke –

+0

Zeile hinzufügen \t \t \t actionBar.setHomeButtonEnabled (true); –

+0

Fügen Sie außerdem actionBar.setDisplayHomeAsUpEnabled (true) hinzu; –

4

sollten Sie Meta-Daten Ihrer manifest.xml hinzufügen, für die Aktivität, die Sie wollen, dass es

Wie

<activity 
     android:name=".Example" 
     android:label="@string/Example" 
     android:theme="Theme.AppCompat.Light"> 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value=".MainActivity" /> 
    </activity> 

und Ihr Code sollte

@Override 
protected void onCreate(Bundle savedInstanceState) { 
....... 
     getActionBar().setDisplayHomeAsUpEnabled(true); 

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

siehe das angehängte Bild. Ich möchte das Drücken der Zurück-Taste erkennen, wenn die Suchansicht angezeigt wird. Ich glaube, der Code, den Sie angehängt haben, funktioniert, wenn eine neue Aktivität geöffnet wird, nicht wenn die Suchansicht geöffnet ist. –

0

in Beispiel so sein Probieren Sie Folgendes aus: Verwenden Sie OnQueryTextListener, anstatt onOptionsItemSelected zu verwenden, um die Suchänderung zu erkennen. Der onQueryTextChanged wird dann mit der Zurück-Schaltfläche (und zu jedem anderen Zeitpunkt, an dem sich der Abfragetext ändert) aufgerufen.

Wenn Sie Ihr Menü eingerichtet haben, weisen Sie die searchView dem Listener zu. Der onQueryTextChange wird immer dann aufgerufen, wenn sich das Suchkriterium ändert (bei jedem Drücken einer Taste außer der Suchtaste), und er wird mit einem leeren String aufgerufen, wenn die Zurück-Taste gedrückt wird. Der onQueryTextSubmit wird aufgerufen, wenn die Suchtaste auf der Tastatur gedrückt wird.

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    getMenuInflater().inflate(R.menu.main, menu); 

    final SearchView searchView = (SearchView)menu.findItem(R.id.action_search).getActionView(); 
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String s) { 
      Log.i(TAG,"onQueryTextSubmit: " + s); 
      searchView.clearFocus(); 
      return true; 
     } 

     @Override 
     public boolean onQueryTextChange(String s) { 
      Log.i(TAG,"onQueryTextChange: " + s); 
      FragmentManager fragmentManager = getSupportFragmentManager(); 
      Fragment fragment = fragmentManager.findFragmentByTag(currentFragmentTag); 
      if (fragment.getClass().getName().startsWith("com.mydomain.myapp.mainactivity.MyFragment")) { 
       if (s.isEmpty()) { 
        ((SingleICPListFragment)fragment).clearSearchCriteria(); 
       } else { 
        ((SingleICPListFragment) fragment).applySearchCriteria(s); 
       } 
      } 
      return true; 
     } 
    }); 

    SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 

    return true; 
}