Autore Topic: chiudere una applicazione  (Letto 2455 volte)

Offline systemgvp

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Ideos
  • Play Store ID:
    systemgvp
  • Sistema operativo:
    Windows 7
chiudere una applicazione
« il: 12 Aprile 2012, 16:59:08 CEST »
0
salve, il mio problema é molto semplice, all'avvio della mia applicazione viene avviato un Intent per mostrare un activity che contiene una banale schermata di login. Il problema sta nel fatto che io vorrei che se durante il login venisse prenuto il tasto Back, invece di chiudere l'activity attuale, mi chiudesse tutta l'applicazione, o in mancanza d'altro, mi facesse le stesse cose che avvengono quando si preme sul bottone della casetta, che "chiude" tutto.

Offline alexAndroid

  • Utente normale
  • ***
  • Post: 185
  • Respect: +27
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Giò
  • Sistema operativo:
    Ubuntu 11.10; Windows XP
Re:chiudere una applicazione
« Risposta #1 il: 12 Aprile 2012, 22:52:43 CEST »
0
Ciao systemgvp,
Se ti interessa chiudere una singola attività puoi usare il metodo finish()
Mentre se ti interessa chiudere l'intera applicazione o crei una catena di finish(), oppure puoi provare il comando System.exit() ma non saprei se funziona.
Sei stato aiutato oppure il tuo problema è stato risolto? Allora premi il tasto THANKS E' un modo utile e carino per ringraziare chi ti è stato di aiuto.

Offline systemgvp

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Ideos
  • Play Store ID:
    systemgvp
  • Sistema operativo:
    Windows 7
Re:chiudere una applicazione
« Risposta #2 il: 16 Aprile 2012, 13:40:44 CEST »
0
si, finish() mi chiude il singolo form, e system.exit non fa altro che riavviarmi tutta l'applicazione, ma come faccio invece a creare una catena di finish come dici tu?

Offline Zappescu

  • Utente junior
  • **
  • Post: 110
  • Respect: +7
    • Mostra profilo
    • Tic Tank Toe
  • Dispositivo Android:
    HTC Magic
  • Play Store ID:
    Zapmobilegames
  • Sistema operativo:
    Win XP
Re:chiudere una applicazione
« Risposta #3 il: 16 Aprile 2012, 13:55:59 CEST »
0
Fai così. Chiama la nuova activity con startactivityforresult. Nell'uscita dall'activity fai il check su un flag impostato a true/false.
Quando dalla nuova activity esci con il tasto back, nella chiamante verifichi cosa ti torna come check. Verificato cosa torna (magari false per il tasto back e true per il resto) decidi cosa fare, per esempio un finish() se ti torna false.
E così puoi andare a catena per n activities, verificando ogni volta il flag in uscita.
Zapmobilegames website
Tic Tank Toe: a new approach for a classic game

Offline systemgvp

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Ideos
  • Play Store ID:
    systemgvp
  • Sistema operativo:
    Windows 7
Re:chiudere una applicazione
« Risposta #4 il: 16 Aprile 2012, 17:53:07 CEST »
0
siccome ancora non sono molto ferrato, potresti farmi un'esempio? anche con due sole Activity

Offline Zappescu

  • Utente junior
  • **
  • Post: 110
  • Respect: +7
    • Mostra profilo
    • Tic Tank Toe
  • Dispositivo Android:
    HTC Magic
  • Play Store ID:
    Zapmobilegames
  • Sistema operativo:
    Win XP
Re:chiudere una applicazione
« Risposta #5 il: 16 Aprile 2012, 18:35:46 CEST »
0
Ok, vediamo....
Diciamo che hai MainActivity che chiama ChildActivity.

In MainActivity definisci:
Codice (Java): [Seleziona]
protected static final int SUB_ACTIVITY_REQUEST_CODE_01 = 1337; // Scegli tu un numero....
static final String KEY_CHOICE_EXIT = "mExit"; // Poi vedrai a cosa serve

Poi fai:
Codice (Java): [Seleziona]
Intent i = new Intent(this, ChidActivity.class);
this.startActivityForResult(i,SUB_ACTIVITY_REQUEST_CODE_01); // quando devi chiamare la childActivity

Nella ChildActivity definisci:
Codice (Java): [Seleziona]
protected final int SUCCESS_RETURN_CODE = 1; // Questo è generico per questo tipo di approccio
boolean end_condition = true; // Questo è il flag per la condizione di uscita. Di base, supponiamo che si esce con la sequenza che ti aspetti per chiudere l'activity e non con il tasto back. Se l'utente esce col back, mettiamo end_condition = false;

Questo vuol dire che il flag end_condition indica la modalità di uscita dall'activity. Settalo a true quando fai l'operazione per cui esci correttamente (lo sai tu il motivo) e a false quando l'utente clicca sul back.

Poi, quando devi uscire, usa questa funzione (la usi sia nel metodo che usi per uscire normalmente che nel metodo onKeyDown dove intercetti la pressione del tasto back):
Codice (Java): [Seleziona]
private void exit(boolean result) {
                Bundle bundle = new Bundle();
                bundle.putBoolean(MainAcitivity.KEY_CHOICE_EXIT, result);
                Intent mIntent = new Intent();
                mIntent.putExtras(bundle);
                ChildActivity.this.setResult(SUCCESS_RETURN_CODE,mIntent);
                finish();
        }
"result" deve contenere il tuo flag end_condition.

Adesso torniamo alla MainActivity:

Codice (Java): [Seleziona]
@Override
  protected void onActivityResult(int result,int resultCode,Intent data) {
        super.onActivityResult(result, resultCode, data);
        if (result == SUB_ACTIVITY_REQUEST_CODE_01) {
                if (data!=null) {
                        Bundle extras = data.getExtras();
                        boolean result = extras.getBoolean(KEY_CHOICE_EXIT);
                        // A questo punto hai il tuo result: true se esco bene, false se sono uscito con il tasto back:
                        if (result) {
                               // Sono uscito bene......
                               // TODO: Fai quello che ti pare
                        } else {
                               // Sono uscito col back..........
                               finish(); // Era questo che volevi fare?
                        }
                }
          }
}

Ecco qua :)
Zapmobilegames website
Tic Tank Toe: a new approach for a classic game