Autore Topic: Mantenimento dati di un'activity  (Letto 486 volte)

Offline MikeKeepsOnShine

  • Utente junior
  • **
  • Post: 84
  • Respect: 0
    • mikekeepsonshine
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Fame , Samsung Galaxy Tab 2 7.0
  • Sistema operativo:
    Windows 7
Mantenimento dati di un'activity
« il: 10 Giugno 2013, 18:03:40 CEST »
0
Hi there.
Sto costrunedo un'app dalla quale è possibile acquistare prodotti online.
Un'activity è dedicata al catalogo dei prodotti, nella quale l'utente può effettuare una ricerca filtrata.
Il problema è il seguente: per poter aggiungere al carrello un prodotto, bisogna essere loggati, quindi se un utente non loggato và sul catalogo e prova ad aggiungere un prodotto al carrello, viene dirottato sull'activity Login.
Una volta eseguito il Login, si viene dirottati sulla pagina precedente che in questo caso è il catalogo, che però ricompare con la ricerca azzerata.
Il procedimento che utilizzo è il seguente:
Sono sul catalogo, e ho bisogno di loggarmi, quindi tramite tap su "login" accedo all'area login, trascinandomi dietro l'activity di provenienza:
Codice (Java): [Seleziona]
Intent login = new Intent(context,Login.class);
login.putExtra("from","catalogo");
startActivity(login);

Nell'activity di login, una volta effettuato il controllo sull'utente etcc, vengo reindirizzato alla pagina di provenienza:
Codice (Java): [Seleziona]
String provenienza = getIntent().getStringExtra("from");
//......vari metodi per il login
if(provenienza.equals("catalogo"){
      Intent log_int = new Intent(context,Catalogo.class);
      startActivity(log_int);    
}

Chiaramente, agendo così, viene richiamato il metodo onCreate dell'activity del catalogo, quindi la ricerca è persa.
Come posso fare per non perdere tutto quello che ho cercato?
Grazie! ;-)
True perfection has to be imperfect

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:Mantenimento dati di un'activity
« Risposta #1 il: 11 Giugno 2013, 09:01:00 CEST »
0
Non lanciare un intent per tornare alla activity di provenienza, fai finish() così chiudi l'activity di login e torni all'ultima activity nello stack delle activity aperte.

Offline MikeKeepsOnShine

  • Utente junior
  • **
  • Post: 84
  • Respect: 0
    • mikekeepsonshine
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Fame , Samsung Galaxy Tab 2 7.0
  • Sistema operativo:
    Windows 7
Re:Mantenimento dati di un'activity
« Risposta #2 il: 11 Giugno 2013, 10:00:27 CEST »
0
Non lanciare un intent per tornare alla activity di provenienza, fai finish() così chiudi l'activity di login e torni all'ultima activity nello stack delle activity aperte.

Hai ragione, ho pensato anche io di farlo, il problema è che sulla ActionBar prima del login ci sono i tasti "registrati" e "log-in" e una volta effettuato il login, solo "log-out". Se faccio finish() una volta loggato, la ActionBar non si aggiorna e anche se l'utente si è loggato, i tasti presenti saranno ancora "registrati" e "log in" ...
True perfection has to be imperfect

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:Mantenimento dati di un'activity
« Risposta #3 il: 11 Giugno 2013, 11:14:33 CEST »
0
Allora invece di fare uno start activity secco fai uno start activity for result.
Così puoi catturare il ritorno e cambiare di conseguenza la ui in base all'esito del login =)

Offline MikeKeepsOnShine

  • Utente junior
  • **
  • Post: 84
  • Respect: 0
    • mikekeepsonshine
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Fame , Samsung Galaxy Tab 2 7.0
  • Sistema operativo:
    Windows 7
Re:Mantenimento dati di un'activity
« Risposta #4 il: 12 Giugno 2013, 14:34:43 CEST »
0
Allora invece di fare uno start activity secco fai uno start activity for result.
Così puoi catturare il ritorno e cambiare di conseguenza la ui in base all'esito del login =)
Nella mia activity di partenza vado a popolare oggetti con dati presi da un database remoto e poi una ListView (utilizzando un adapter), utilizzando lo startActivityForResult riesco a mantenere tutto ciò?
True perfection has to be imperfect

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:Mantenimento dati di un'activity
« Risposta #5 il: 12 Giugno 2013, 15:59:21 CEST »
+1
Nella mia activity di partenza vado a popolare oggetti con dati presi da un database remoto e poi una ListView (utilizzando un adapter), utilizzando lo startActivityForResult riesco a mantenere tutto ciò?

Assolutamente si. La differenza sostanziale tra uno startActivity è uno startActivityForResult sta nel fatto che quando il controllo torna all'activity chiamante viene invocato il suo metodo onActivityResult; ma per il resto tutto è invariato.

L'unica cosa da fare è nell'activity chiamante:
Codice (Java): [Seleziona]
// startActivity(i); vecchia chiamata al login
startActivityForResult(i, 0);

e gestire il ritorno
Codice (Java): [Seleziona]
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if(resultCode==1) {
    // cambiamenti alla UI per effetto del login ok
  }
  else{
    // cambiamenti alla UI per effetto del login ko
  }
}

Nell'activity di login invece va predisposto il ritorno prima della chiamata al finish
Codice (Java): [Seleziona]
  if(loginOk)
    setResult(1); // tornare 1 lo interpreterò come un login avvenuto con successo
  else
    setResult(-1); // tornare -1 lo interpreterò come un login fallito
  finish(); // chiudo quest'activity e torno a quella chiamante, visto che sono stato lanciato con startActivityForResult verrò chiamato il suo onActivityResult

Naturalmente meglio ricorrere a dei valori costanti invece che specificare degli int secchi.
Maggiori informazioni si possono trovare sul javadoc della classe Activity e in giro per la rete ci sono milioni di esempi :)

Offline MikeKeepsOnShine

  • Utente junior
  • **
  • Post: 84
  • Respect: 0
    • mikekeepsonshine
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Fame , Samsung Galaxy Tab 2 7.0
  • Sistema operativo:
    Windows 7
Re:Mantenimento dati di un'activity
« Risposta #6 il: 12 Giugno 2013, 16:22:58 CEST »
0
ok grazie! appena posso lo provo! Intanto un "THANKS" ti va di diritto  ;-)
True perfection has to be imperfect