2012-06-25 17 views
13

dire che sono sulla mia attività principale e mi metto una nuova attivitàControllare se è stato premuto il tasto Indietro in Android?

MainActivity > NewActivity 

E da NewActivity si preme il tasto Back

MainActivity < NewActivity 

voglio MainActivity fare qualcosa se è visualizzato dopo NewActivity è chiuso, ma non quando MainActivity viene eseguito normalmente, ad esempio quando si esegue l'applicazione per la prima volta. Qualcuno sa se questo è possibile?

risposta

8

Un paio di idee:

  • Si può solo impostare un flag in MainActivity quando si spara su NewActivity.
  • È possibile chiamare startActivityForResult da MainActivity e organizzare per NewActivity impostare un risultato, che si riceverà in MainActivity.onActivityResult() quando NewActivity finiture.
+0

Grazie! Ho usato startActivityForResult, funziona alla grande! –

0

Quando si avvia è necessario utilizzare startActivityForResult e utilizzare un valore valido requestId. Tale requestId verrà passato nuovamente a onActivityResult una volta NewActivity finiture.

16
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) { 
     Log.d(this.getClass().getName(), "back button pressed"); 
    } 
    return super.onKeyDown(keyCode, event); 
} 

@Update. Se si desidera ricevere una notifica al termine di NewActivity, è necessario avviarlo con startActivityForResult (Intent, requestCode). Quindi, è necessario eseguire l'override suActivityResult() su MainActivity. Controlla qui il parametro requestcode, se il codice di ritorno è uguale al codice di invio (quando avvii childActivity), inserisci del codice per fare la tua attività.

int MYCODE=1000; 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // Result OK.d. 
    if (requestCode == MYCODE) { 
     // do something good 
    } 
} 
+0

Non dovrebbe semplicemente ascoltare se viene premuto il pulsante Indietro? –

+0

Se si desidera ascoltare solo il pulsante Indietro, utilizzare i primi codici di ritaglio. –

6

È possibile ignorare il metodo onBackPressed() in NewActivity che rileverà quando si preme il pulsante indietro. Quindi, per informare MainActivity a riguardo, è possibile inviare un flag booleano in un bundle in modo che MainActivity rilevi che è la sua apertura dopo NewActivity.

In NewActivity:

 @Override 
     public void onBackPressed() { 
       boolean fromNewActivity=true; 

     Intent mainIntent = new Intent(view.getContext(), MainActivity.class); 
     Bundle bundleObj = new Bundle(); 
     bundleObj.putString("fromNewActivity", Boolean.toString(fromNewActivity)); 
     mainIntent.putExtras(bundleObj); 
     startActivityForResult(mainIntent, 0); 
      } 

In MainActivity in onCreate() metodo:

 Bundle extras = getIntent().getExtras(); 
     boolean fromNewActivity =Boolean.parseBoolean(extras.getString("fromNewActivity")); 

Ora è possibile verificare se il MainActivity viene aperto dopo NewActivity o meno.

8

Ho provato il seguente metodo per rilevare il pulsante indietro premuto sulla barra delle azioni in attività dal primo metodo e il secondo è utilizzato per rilevare il pulsante hardware mobile indietro o il pulsante di attività di eliminazione.

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

@Override 
public void onBackPressed() { 
    setResult(RESULT_CANCELED); 
    super.onBackPressed(); 
} 
Problemi correlati