it-swarm.com.de

erkennen eines Klick auf die Aktionsleiste zurück - (OnOptionsItemSelected wird nicht aufgerufen, wenn auf die Aktionsleiste zurück geklickt wird)

Ich habe eine Aktionsleiste, die eine searchview enthält. Wenn der Benutzer auf die Suchschaltfläche klickt und die Suchansicht minimiert, zeigt die Aktionsleiste auf der linken Seite eine Zurück-Schaltfläche. 

enter image description here

Wie können wir erkennen, wenn der Benutzer auf diese Zurück-Schaltfläche klickt?

Bearbeiten

basierend auf der Antwort habe ich meine OnOptionsItemSelected geprüft, aber sie ruft auch nicht an. Dies ist der Code meiner 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);
}
13

Setzen Sie dies auf die 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;
    }
});
12
Lisandro Lopez

Fügen Sie Ihrer Manifest.xml Metadaten für die gewünschte Aktivität hinzu

Mögen 

<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 in Beispiel so aussehen

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

Überschreiben Sie einfach die Methode. 

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

            }
            return true;
    }
2
Avtar Guleria

Mögliches Duplikat von wie man die Schaltfläche zum Zurücksetzen der Aktionsleiste in Android überschreibt?

Sowieso:

Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);


        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Do what you want to do
            }
        });
0
Zubair Younas

Versuchen Sie Folgendes: Verwenden Sie anstelle von onOptionsItemSelected die Suchänderung, verwenden Sie einen OnQueryTextListener. OnQueryTextChanged wird dann mit der Schaltfläche "Zurück" (und bei jeder anderen Änderung des Abfragetextes) aufgerufen.

Wenn Sie Ihr Menü einrichten, weisen Sie den searchView den Listener zu. Die onQueryTextChange wird aufgerufen, wenn sich die Suchkriterien ändern (bei jedem Tastendruck mit Ausnahme der Suchtaste) und beim Drücken der Zurück-Taste eine leere Zeichenfolge aufgerufen. Das 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;
}
0
Eric Rowe