2015-07-28 15 views
8

AppCompatActivity onBackPressed() -Methode kann nicht in meiner Aktivität ausgelöst werden.onBackPressed() - Methode in AppCompatActivity nicht ausgelöst

Ich sehe die Zurück-Pfeil-Taste und bekomme die Animation beim Drücken, aber sonst passiert nichts. Das Überschreiben von onKeyDown() hat den gleichen Effekt. es heißt nicht.

Ich habe viele Stunden damit verbracht, dies ohne Glück zu erforschen. Nichts scheint zu funktionieren. Jeder hat ein ähnliches Problem gehabt? Vielleicht ist das ein bekannter Bug?

Mein Activity.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" 
tools:context="com.litenote.android.BackTestingActivity2Activity"> 
<include 
    android:id="@+id/appBar" 
    layout="@layout/app_bar" /> 
<TextView android:text="@string/hello_world" android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

app_bar.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/appBar" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:background="@color/primary" 
android:titleTextAppearance="@color/textWhite" 
android:elevation="4dp" 
android:theme="@style/ThemeOverlay.AppCompat.Dark" 
android:popupTheme="@style/CustomPopupMenuTheme"> 

Die Aktivität Java-Datei

package com.litenote.android; 

import android.support.v7.app.ActionBar; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 

import com.superpad.android.R; 

public class BackTestingActivity2Activity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_back_testing_activity2); 
    Toolbar actionBar = ((Toolbar) findViewById(R.id.appBar)); 
    setSupportActionBar(actionBar); 
    getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP); 
    getSupportActionBar().setDisplayShowHomeEnabled(true); 

} 

@Override 
public void onBackPressed() { 
    Log.d("BACK_BUTTON_DOESNT_WORK", "I will never execute and you will never see me :("); 
    super.onBackPressed(); 
    this.finish(); 
} 
} 
+0

Fang zurück-Taste auf Schlüsselmethode klicken, und rufen 'onBackPressed()' –

+0

Wenn ich meine Aktivität onKeyDown() außer Kraft setzen, dass doesn Ich werde auch nicht angerufen, obwohl die Taste gedrückt ist und ich sie drücken kann. –

+0

Welcher Pfeil ist das? 'onBackPressed' ist für die physische Zurück-Schaltfläche neben der Home-Schaltfläche. – njzk2

Antwort

3

In Ihrem Manifest-Datei definieren die folgenden in Ihrem Aktivitäts-Tag:

<meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.example.ParentActivity" /> 

Danach in Ihrer Aktivität:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case android.R.id.home: 
      NavUtils.navigateUpFromSameTask(this); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
     } 
    } 
+0

Ich habe meine Antwort bearbeitet, bitte überprüfen Sie – Aakash

+0

Das ist es, vielen Dank! Du hast meinen Tag gemacht :) –

+0

froh, dir zu helfen :) – Aakash

0

für mich Dieser Code funktioniert. Offensichtlich gibt es nicht den ganzen Code, aber ich denke, dass es nützlich für Sie sein kann zu verstehen, wie das backPressed Event implementiert wird.

public class RedActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    ... 
    final ActionBar ab = getSupportActionBar(); 
    ab.setHomeAsUpIndicator(R.drawable.ic_menu); 
    ab.setDisplayHomeAsUpEnabled(true); 
    ... 
    } 

    ... 

    @Override 
    public void onBackPressed() { 
    if (isDrawerOpen()) { 
     drawerLayout.closeDrawer(GravityCompat.START); 
    } else if (getFragmentManager().getBackStackEntryCount() > 0) { 
     getFragmentManager().popBackStack(); 
    } else { 
    //Ask the user if they want to quit 
    new AlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_alert) 
         .setTitle(R.string.quit) 
         .setMessage(R.string.really_quit) 
         .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface dialog, int which) {   
           finish(); 
          } 

         }) 
      .setNegativeButton(R.string.no, null) 
      .show(); 
     } 
    } 
} 
+1

Mein Problem ist, dass onBackPressed() überhaupt nicht aufgerufen wird. Ihr Code geht davon aus, dass er aufgerufen wurde. –

+0

Der Unterschied ist in "OnCreate" -Methode. Ich habe keine Metadaten zum Manifest hinzugefügt. – xcesco

+0

Ich habe versucht mit setHomeAsUpIndicator() aber mit dem gleichen Ergebnis ... OnBackPressed wird nicht aufgerufen. Es macht jedoch Sinn, von meiner angenommenen Antwort zu erkennen, dass dies ein AppBar-Ereignis ist, kein Backpress, das durch Klicken auf das Android-Dreieck nach links kommt. Ich verwechselte diese beiden, weil in einigen Aktivitäten beide im selben Szenario ausgelöst werden, gehen Figur ... –

6

Ich glaube, onBackPressed() wird nur, wenn die physische Zurück-Taste gedrückt wird aufgerufen. Wenn Sie versuchen, die Symbolleiste Zurück-Taste drücken (das Navigationssymbol) zu fangen, versuchen Sie die folgenden Ausschnitt mit:

@Override 
public boolean onOptionsItemSelected(MenuItem menuItem) { 
    switch (menuItem.getItemId()) { 
     case android.R.id.home: { 
      // Your code here 
     } 
    } 
    return (super.onOptionsItemSelected(menuItem)); 
} 
0

onBackPressed() in AppCompactActivity nicht vorhanden ist, Sie müssen implementieren ein InterFaceKeyEvent.Rückruf und außer Kraft setzt onKeyUp Methode und prüfen, ob der Schlüssel Backbutton ist oder Sie können ActionBarActivity erstrecken, das Kind Klasse von AppCompactActivity

+2

Können Sie Referenzen zur Verfügung stellen, die diesen Anspruch unterstützen? – Nativ

1

back_button auf dem ActionBar

diesen Willen Wok

Toolbar toolbar=(Toolbar) findViewById(R.id.appBar); 
setSupportActionBar(toolbar); 
getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP); 
getSupportActionBar().setDisplayShowHomeEnabled(true); 

@Override 
public void onBackPressed() { 
super.onBackPressed(); 
this.finish(); 

}

oder Satz Last, die Aktivität, wenn sie zurück

<meta-data 
android:name="android.support.PARENT_ACTIVITY" 
android:value="com.example.ParentActivity" /> 
Verwandte Themen