2015-07-28 16 views
8

Il metodo AppCompatActivity onBackPressed() non si attiva nella mia attività.onBackPressed() non attivato in AppCompatActivity

Vedo il pulsante freccia indietro e ottengo l'animazione quando lo preme, ma non succede nient'altro. anche sovrascrivere onKeyDown() ha lo stesso effetto. non è chiamato.

Ho passato molte ore a fare ricerche senza fortuna. Niente sembra funzionare. Qualcuno ha avuto un problema simile? Forse questo è un bug noto?

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

Il file di attività di Java

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

Cattura pulsante indietro sul metodo chiave, e chiamare 'onBackPressed()' –

+0

Se sovrascrivo mia attività onKeyDown(), che doesn o ti chiamano, anche se il pulsante è lì e posso premerlo –

+0

che freccia indietro è? 'onBackPressed' è per il pulsante back fisico, accanto al pulsante home. – njzk2

risposta

3

Nel file manifest definire quanto segue all'interno il tag attività:

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

Dopo che nella vostra attività:

@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

ho modificato la mia risposta, si prega di controllare – Aakash

+0

Questo è tutto, grazie mille! hai reso la mia giornata :) –

+0

felice di aiutarti :) – Aakash

0

Questo codice funziona per me. Ovviamente non c'è tutto il codice, ma penso che possa essere utile per capire come implementare l'evento backPressed.

+1

Il mio problema è che, suBackPressed() non viene chiamato affatto. il tuo codice presuppone che sia stato chiamato. –

+0

La differenza è nel metodo "onCreate". Non ho aggiunto metadati per manifestare. – xcesco

+0

Ho provato con setHomeAsUpIndicator() ma con lo stesso risultato ... onBackPressed non viene chiamato. Ha senso comunque, dalla mia risposta accettata mi rendo conto che questo è l'evento AppBar, non una stampa di ritorno che deriva dal fare clic sul triangolo di Android che punta a sinistra. Ho confuso questi due perché in alcune attività sono entrambi attivati ​​nello stesso scenario, vai a ... –

6

Credo che onBackPressed() venga chiamato solo quando si preme il pulsante fisico indietro. Se si sta tentando di prendere la barra degli strumenti di nuovo premere il pulsante (l'icona di navigazione), provare a utilizzare il seguente frammento:

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

onBackPressed() non è presente in AppCompactActivity, Devi implementare un InterFaceKeyEvent.Richiamata e sovrascrivere onKeyUp metodo e verificare se la chiave è BackButton o è possibile estendere ActionBarActivity che è classe figlia di AppCompactActivity

+2

Puoi fornire riferimenti che supportano questo reclamo? – Nativ

1

back_button sul ActionBar

questa volontà 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(); 

}

o set che vengono caricati attività quando fa clic su Indietro

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