Come chiudere l’attività e tornare alla precedente attività in android

Ho una attività principale, che quando clicco su un pulsante, si avvia una nuova attività, ho usato il seguente codice:

Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);

Il codice di cui sopra è stato eseguito dall’attività principale.

Ora nella mia nuova attività che è chiamato da sempre l’attività principale, ho un pulsante indietro.
Quando faccio clic su questo pulsante indietro voglio che la mia nuova attività di chiudere e deve tornare all’originale attività principale.

Ho provato a chiamare super.finish() e solo finish() (da la nuova attività), ma questo poi si chiude tutta la mia applicazione (tra cui la mia attività principale).

Come posso chiudere la attività che attualmente è a fuoco, e poi il ritorno all’attività principale?

A CURA

Il fatto che il mio telefono indietro pulsante si chiude anche tutta la mia app, mi porta a pensare che ho iniziato la seconda attività in modo non corretto?


OK ho cercato,

Ho creato un Impostazioni di Attività che utilizza lo stesso manifesto di codice e lo stesso codice per l’Avvio dell’attività.

Per le impostazioni di Attività quando premo il pulsante indietro, si ritorna all’attività Principale.

Con l’attività di cui sopra, nel la domanda principale è semplicemente esce tutta la mia app.

In modo che il problema non sembra essere con il codice per completare l’attività, ma l’attività stessa.

  • Non hai nemmeno bisogno di un pulsante indietro, lasciare che l’utente ha utilizzato il telefono tasto indietro e non fare nulla.
  • I telefoni di nuovo il pulsante si chiude l’applicazione di ingresso, non solo la mia attività secondaria. Non voglio chiudere l’attività principale.
  • Il pulsante “indietro” non dovrebbe poterlo fare, può mostrare il tuo codice?
  • Rispondendo alla tua modifica, l’attività secondaria guarda bene da quello che hai postato. Penso TGMCians, probabilmente, è la risposta giusta e indagare su il manifesto.
  • vedere questo risposta penso che questo vi aiuterà a
InformationsquelleAutor Zapnologica | 2013-03-13



17 Replies
  1. 185

    Penso che si sta chiamando finish() metodo MainActivity prima di iniziare SettingsActivity.

    Lo scenario che hai descritto si verifica in due modi seguenti:

    SIA

    Aver impostato android:noHistory = "true" per MainActivity all’interno AndroidManifest.xml che provoca MainActivity per finish automaticamente premendo il tasto indietro.

    O

    Prima di passare alla tua SettingsActivity’, hai chiamato finish() nel MainActivity, che lo uccide. Quando si preme il pulsante indietro,dal momento che nessun altra attività è preimpostato in stack pop, torna alla schermata principale.

    • Questo spiegherebbe perché il telefono pulsante ‘indietro’ inoltre respinto l’attività principale.
    • Quando il debug, ho notato l’esecuzione continua dopo la fine(), quindi è consigliabile mettere un ritorno in aggiunta.
    • l’ho fatta un secolo , non c’è bisogno di ringraziare, anche se @TGMCians
    • Non è il terzo motivo, in questa risposta, solo una ripetizione del primo?
  2. 55

    Si può tornare alla precedente attività semplicemente chiamando la fine() in attività che vengono su. Nota qualsiasi codice dopo la fine() chiamata verrà eseguito – si può solo fare un ritorno dopo la chiamata di finitura() per risolvere il problema.

    Se si desidera restituire i risultati di attività di uno poi quando inizio attività due è necessario:

    startActivityForResults(myIntent, MY_REQUEST_CODE);

    All’interno del vostro detta attività è quindi possibile ottenere l’Intento onCreate() parametro o usato

    getIntent();

    Per impostare restituire un risultato di attività di uno, in attività di due

    setResult(Activity.RESULT_OK, MyIntentToReturn);

    Se non avete intenzione di tornare poi basta dire

    setResult(Activity.RESULT_OK);

    Se l’attività è male e i risultati si possono utilizzare Attività.RESULT_CANCELED (questo viene utilizzato per impostazione predefinita). Quindi in attività uno si fa

    onActivityResult(int requestCode, int resultCode, Intent data) {
        //Handle the logic for the requestCode, resultCode and data returned...
    }

    Per completare l’attività di due usare gli stessi metodi, con finish (), come descritto sopra, con i risultati già impostato.

    • “Nota qualsiasi codice dopo la fine() chiamata verrà eseguito – si può solo fare un ritorno dopo la chiamata di finitura() per risolvere questo” credo ” fix ” è una cattiva scelta di parole qui. E ‘ più come si sta evitando l’esecuzione delle seguenti linee (non fissa).
  3. 10

    se si utilizza frammento u dovrebbe utilizzare

    getActivity().onBackPressed();

    se si utilizza singola attività u possibile utilizzare

    finish();
  4. 6

    provare questo codice invece di finish:

    onBackPressed();

    • Funziona bene per tornare da ActivityB per ActivityA. I frammenti e le attività potevano usare @Osama Ibrahim risposta.
  5. 4
    Button edit = (Button) view.findViewById(R.id.yourButton);
    edit.setOnClickListener(new OnClickListener() {
    
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(this, YourMainActivity.class);
            startActivity(intent);
            finish();
        }
    });
  6. 4

    Questo chiude l’intera applicazione:

    this.finish();
    • Questo chiude l’intera applicazione, come indicato int egli domanda, non solo per l’attività corrente, così Come i telefoni pulsante indietro ?
    • Come ho precedentemente svolta dalla Fotocamera attività.
    • non è vero. chiude solo attività corrente. Vedi: developer.android.com/reference/android/app/…
  7. 2

    Credo che la seconda attività è probabilmente legato alla vostra attività principale, come un bambino attività. Controlla il tuo AndroidManifest.xml file e vedere se il <activity> voce per il vostro bambino attività prevede un android:parentActivityName attributo. Dovrebbe essere qualcosa come questo:

    <?xml ...?>
    ...
    <activity
        android:name=".MainActivity"
        ...>
    </activity>
    <activity
        android:name=".ChildActivity"
        android:parentActivityName=".MainActivity"
        ...>
    </activity>
    ...
  8. 1

    Basta non chiamare finish() sul tuo MainActivity quindi questo elimina la necessità di sostituire la tua onBackPressed() nel SecondActivity a meno che non si stanno facendo altre cose in quella funzione. Se si sente il “bisogno” di questo pulsante indietro, allora si può semplicemente chiamare finish() sul SecondActivity e che vi porterà al vostro MainActivity come non hai chiamato finish() su di esso

    • Ho provato questa strada, ma io sono circa 10 schermate in sequenza che uso Png ad alta risoluzione. Il problema è che da circa schermo 7, il dispositivo di ricordi, grazie a tutte le attività di back-stack. Ho deciso di chiamare la finitura su ogni attività, e ciò ha risolto il problema, consentendo la raccolta dei rifiuti, ma ora è sul retro comportamento deve codificati manualmente perché il back-stack è vuoto. Hai eseguito in questo problema o sa di eventuali meccanismi di Android per affrontare questo?
    • Cosa si desidera che il pulsante indietro per fare? Tornare a qualsiasi precedente Activity stato o sempre tornare al MainActivity? Inoltre, se siete a corto di memoria con Bitmaps allora si dovrebbe leggere Questa parte di Documenti. Mi ha aiutato
    • se si vuole tornare alla precedente attività, allora penso che è necessario capire la gestione della memoria per le immagini e non di fine attività (magari con il link che ho fornito). In caso contrario, sarà necessario ricreare una nuova istanza di attività e cercare di capire che per tornare a
    • Vorrei che il pulsante indietro per andare solo alla schermata precedente. Questa è una serie di schermate tutorial, fondamentalmente, e l’utente può andare avanti/indietro. Ogni schermo è progettato e utilizza un sacco di png – a volte png che occupano la maggior parte dello schermo (e non solo piccole miniature), quindi è succhiare un sacco di memoria per ogni schermo.
    • Penso che si desidera sovrascrivere il onBackPressed() il metodo e poi basta creare manualmente le attività a cui si desidera andare. Si può quindi terminare l’uno e l’avvio di quella precedente.
  9. 1

    Non so se questo è anche utile o no, ma mi è stato strugling con lo stesso problema e ho trovato un modo piuttosto semplice, con solo una variabile boolean globale e onResume() azione. Nel mio caso, la mia Attività C se cliccato un pulsante specifico si dovrebbe attivare il finish() di Attività di B!

    Activity_A -> Activity_B -> Activity_C

    Activity_A (si apre in genere Activity_B)

    Activity_B (su alcuni clic sul pulsante si apre Activity_C):

    //Global:
    boolean its_detail = false;
    //-------
    SharedPreferences prefs =  getApplicationContext().getSharedPreferences("sharedpreferences", 0);
    boolean v = prefs.getBoolean("select_client", false);
    
    its_detail = v;
    
    startActivity(C);
    
    @Override
    public void onResume(){
         super.onResume();
         if(its_detail == true){
            finish();
         }
    }

    Così, ogni volta che clicco il pulsante su Attività C sarebbe fare il “onResume()” la funzione dell’Attività di B e tornare alla Attività A.

  10. 1
     @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            int id = item.getItemId();
    
            if ( id == android.R.id.home ) {
                finish();
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }

    Provare questo funziona sia su barra degli strumenti pulsante indietro come tasto indietro.

    • Questo ha funzionato per me. Ho anche avuto un obbiettivo principale l’allevamento e SettingsActivity con android:parentActivityName=".MainActivity" per il secondo. Questo codice maniglie che Home/Back pulsante toolbat e appena termina l’attività corrente di tornare a quello precedente, in stack. Grazie.
  11. 1

    Abbiamo incontrato una situazione molto simile.

    Attività 1 (Apertura) -> Attività 2 (Anteprima) -> Attività 3 (Dettaglio)

    Non corretto “sul retro premere il tasto” Risposta

    • Dispositivo premere sull’Attività 3 nelle Attività 2.

    Ho controllato tutte le risposte postato sopra e nessuno di loro ha funzionato. Sintassi di Java per la transizione tra le Attività 2 e Attività 3 è stato rivisto per essere corretto.

    Fresco dal codice che chiama la app 3rd party. da un ‘ Attività. Abbiamo deciso di indagare la configurazione angolo, infine, che ci permette di identificare la causa principale del problema.

    Ambito: Configurazione dell’Attività 2 (chiamante).

    Causa Principale:

    android:launchMode="singleInstance"

    Soluzione:

    android:launchMode="singleTask"

    A quanto pare su questa “sul retro premere” problema singleInstance ritiene richiamato Attività in un caso, con la chiamata di Attività, mentre singleTask consentirà richiamato Attività che hanno la loro propria identità sufficiente per l’posteriore a premere per poter funzionare come dovrebbe.

  12. 0
    { getApplicationContext.finish();   }

    Provare questo metodo..

    • Mentre questo blocco di codice che può rispondere alla domanda, sarebbe meglio se si potesse fornire una piccola spiegazione del perché lo fa.
  13. 0

    può essere possibile che si sta chiamando finish(); nel fare clic sul pulsante evento così l’attività principale è chiuso solo dopo aver cliccato il pulsante e quando si ritorna dalla prossima attività l’applicazione è uscita a causa principale attività è già chiuso e non è attiva alcuna attività.

  14. 0

    Fine chiude l’intera applicazione, è questa è una cosa che odio in sviluppo su piattaforma Android non finire che è bene, ma che non tenere il passo wit ok sintassi hanno

    startActivity(intent)

    Perché non

    closeActivity(intent)
    ?

    • Questo risponde alla domanda ? O questo è solo un suggerimento per essere provato ? In entrambi i casi, lo sfogo è inutile e probabilmente non accogliere in MODO
  15. 0

    sul metodo onCreate della vostra attività
    scrivere il codice riportato di seguito.

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);

    Poi sovrascrivere il onOptionsItem selezionato il metodo della vostra attività, come segue

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

    E vi sono buone per andare.

Lascia un commento