webentwicklung-frage-antwort-db.com.de

wie kann ich die Aktionstaste in Android außer Kraft setzen?

Ich möchte die Aktivitätsrückseitenschaltfläche in der Aktionsleiste anpassen, nicht die Hardkey-Zurückschaltfläche. Ich habe die onBackPressed()-Methode überschrieben. Es funktioniert mit der Emulator-Schaltfläche "Zurück", nicht jedoch mit der Schaltfläche "Aktionsleiste". 

Ich möchte, dass es mit der Aktionsleiste geschieht. Wie kann ich das machen?

Hier ist mein Code:

@Override
public void onBackPressed() {
    Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show(); 
    return;
}

Ich habe diesen Toast verwendet, unabhängig davon, ob das Zurückdrücken funktioniert oder nicht, aber die eigentliche Implementierung ändert sich wie eine Rückkehr zur vorherigen Aktivität. Dies funktioniert jedoch nicht mit der Schaltfläche auf der Aktionsleiste (außer dem Titel der Aktivität).

Bitte kann mir jemand das Problem angeben.

79
G K

Ich denke, Sie möchten die Klick-Funktion des Home-Buttons außer Kraft setzen. Sie können diese Funktionalität in Ihrer Aktivität überschreiben.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case Android.R.id.home:
        Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show(); 
        break;
    }
    return true;
}
183
ibrahimyilmaz

Wenn Sie möchten, dass sich der ActionBar-Back-Button genauso verhält wie der Hardware-Back-Button:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
            if (item.getItemId() == Android.R.id.home) {
                    onBackPressed();
                    return true;
            }
            return false;
    }
34
ruX

Zwei Dinge müssen beachtet werden, wenn der Benutzer entweder die Zurück-Taste oder die Home-Taste der Aktionsleiste drücken kann.
Wenn Sie ihn an dasselbe Ziel umleiten möchten, können Sie dies tun. 

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case Android.R.id.home:
            onBackPressed();
            return true;
    }
    return false;
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
    startActivity(intent);
    finish();
}

Dadurch wird der Benutzer dazu gebracht, entweder die Taste oder die Aktionsleistenschaltfläche zu drücken.

8
ssi-anik
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                switch (item.getItemId()) {
                case Android.R.id.home:
                       finish();
                   break;
                }
                return true;
        }
7
Krunal Shah

Ich habe dies erreicht, indem ich einfach zwei Schritte benutze,

Schritt 1: Gehen Sie zu AndroidManifest.xml und fügen Sie den Parameter im Tag - Android hinzu: parentActivityName = ". Home.HomeActivity".

beispiel:

 <activity
    Android:name=".home.ActivityDetail"
    Android:parentActivityName=".home.HomeActivity"
    Android:screenOrientation="portrait" />

Schritt 2: Fügen Sie in ActivityDetail Ihre Aktion für vorherige Seite/Aktivität hinzu

beispiel:

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
       case Android.R.id.home:
           onBackPressed();
           return true;
    }
    return super.onOptionsItemSelected(item);
 }
3
Vivek Hande

Tut mir leid, meine Antwort ist verspätet, aber für alle anderen Personen, die auf dieser Seite mit derselben Frage ankamen, hatte ich das oben ausprobiert:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  ...
  if (item.getItemId() == Android.R.id.home) {
    ....
  }
  ....
}

dies gelang jedoch nicht beim Drücken der Taste "Zurück". 

Schließlich habe ich auf https://stackoverflow.com/a/37185334/3697478 eine Methode gefunden, die für mich funktioniert hat. Sie soll "onSupportNavigateUp ()" überschreiben, da ich die Aktionsleiste aus der "AppCompatActivity" -Bibliothek verwende . (Es gibt ein gleichwertiges "onNavigateUp ()") für die neuere Actionbar/Symbolleistenbibliothek.)

@Override
public boolean onSupportNavigateUp(){  
  finish();  
  return true;  
}

und ich habe den Abschnitt "Android: parentActivityName =". MainActivity "aus der Manifestdatei entfernt.

2

Wenn Sie zum vorherige Instanz einer Aktivität zurückkehren möchten, indem Sie die HomeButton-Schaltfläche von ActionBar drücken, ohne Neuerstellen, können Sie die getParentActivityIntent-Methode überschreiben, um die aus dem hinteren Stapel verwendete zu verwenden:

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public Intent getParentActivityIntent() {
      return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
}

BEARBEITEN:
Sie können das gleiche Ergebnis auch mit erreichen
Setzen Sie launchMode Ihrer übergeordneten Aktivität auf singleTop.
Setzen Sie Android:launchMode="singleTop" auf übergeordnete Aktivität in Ihrem Manifest.
Oder Sie können das Flag FLAG_ACTIVITY_CLEAR_TOP mit der Absicht UP verwenden.
referenz: Bereitstellung der Navigation

2
Leo Droidcoder
@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 (id == Android.R.id.home) {
        onBackPressed();
        return true;
    }
    //noinspection SimplifiableIfStatement
    if (id == R.id.signIn) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
///////////////////
@Override
public void onBackPressed() {
    super.onBackPressed();
    finish();
}
0
Roshaan Qurban

Es gibt verschiedene Möglichkeiten, die Zurück-Schaltfläche in der Leiste einzurichten:

1) Die Methode .setDisplayHomeAsUpEnabled(true); erledigt das, und Sie können Android.R.id.home einfach überschreiben.

2) Hinzufügen von <meta-data Android:name="Android.support.PARENT_ACTIVITY" Android:value="my.package.parrent" /> in Android Manifest, aber in diesem Fall können Sie kann nichtAndroid.R.id.home in OnOptionsMenuSelected überschreiben.

.. für diejenigen, die sich fragen, warum es für sie nicht funktioniert ...

0
Jiří