Controlla se il tasto Indietro è stato premuto in Android?

Dì che sono nella mia attività principale e inizio una nuova attività

MainActivity > NewActivity 

E da NewActivity premo il tasto Indietro

 MainActivity < NewActivity 

Voglio che MainActivity faccia qualcosa se viene visualizzato dopo che NewActivity è stato chiuso, ma non quando MainActivity viene eseguito normalmente, ad esempio quando si esegue l’applicazione per la prima volta. Qualcuno sa se questo è ansible?

    Un paio di idee:

    • Puoi semplicemente impostare un flag in MainActivity quando MainActivity NewActivity .
    • Puoi chiamare startActivityForResult da MainActivity e organizzare NewActivity per impostare un risultato, che riceverai in MainActivity.onActivityResult() termine di NewActivity .
     @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); } 

    @Aggiornare. 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 } } 

    Provo il metodo seguente per rilevare il pulsante indietro premuto sulla barra delle azioni in attività con il primo metodo e il secondo viene utilizzato per rilevare il pulsante hardware mobile indietro o il pulsante di attività uccisione.

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

    Puoi sovrascrivere il metodoBackPressed () in NewActivity che rileverà quando viene premuto il pulsante Indietro. Quindi, per informare MainActivity a riguardo, è ansible 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 nel metodo onCreate ():

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

    Ora è ansible verificare se MainActivity è aperto dopo NewActivity o meno.

    Quando si avvia NewActivity è necessario utilizzare startActivityForResult e utilizzare un requestId valido. Tale requestId verrà passato a te su onActivityResult al onActivityResult NewActivity .