Autore Topic: Andare avanti e indietro tra 2 activity  (Letto 1099 volte)

Offline Qwertid

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
Andare avanti e indietro tra 2 activity
« il: 12 Settembre 2011, 17:32:06 CEST »
0
Ciao a tutti!  :-)

Vorrei un consiglio da voi su come poter impostare determinati passaggi tra activity: vi spiego la situazione.

La parte principale della mia applicazione si basa su due activity: l'utente ha facoltà di switchare tra le due, con una pressione lunga sul display. Entrambe le activity si compongono di un determinato numero di bottoni, immagini, textview di cui è molto importante salvare lo stato nel momento in cui l'utente switcha sull'altra (e ovviamente ripristinarlo quando l'utente ci ritorna su).

Le mie domande sono le seguenti:

1) Partendo dall'activity numero 1, imposto un listener per una pressione lunga sul display che mediante un intent mi porti all'activity numero 2. Una volta che sono sull'activity 2 non devo fare altro che impostare un intent all'interno dello stesso tipo di listener per pressione lunga che mi riporti all'activity 1? Non devo utilizzare il metodo finish() per nessuna delle due vero?

2) Come faccio a salvare i dati? Cioè tecnicamente lo so, all'interno del metodo onSaveInstanceState(Bundle state). Devo farlo per entrambe le activity? Ed è corretto andare a ripristinare i dati all'interno del metodo onCreate? (ho letto in giro che questa sia una buona soluzione piuttosto che l'utilizzo del metodo onRestoreInstanceState).

Grazie a tutti della consulenza :)

Offline andbin

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: +1
    • Mostra profilo
    • www.andbin.net
Re:Andare avanti e indietro tra 2 activity
« Risposta #1 il: 13 Settembre 2011, 16:47:04 CEST »
0
1) Partendo dall'activity numero 1, imposto un listener per una pressione lunga sul display che mediante un intent mi porti all'activity numero 2. Una volta che sono sull'activity 2 non devo fare altro che impostare un intent all'interno dello stesso tipo di listener per pressione lunga che mi riporti all'activity 1? Non devo utilizzare il metodo finish() per nessuna delle due vero?
Ciao, occhio a questa questione abbastanza importante.
In Android le Activity sono gestite in uno "stack" (il back stack), una "pila" dove le Activity vengono inserite e tolte da un solo "lato" della pila.

Lo startActivity (e varianti) nella modalità predefinita fa inserire una nuova istanza della Activity invocata al "top" dello stack. Se supponiamo lo scenario che dicevi (due Activity A e B che si "lanciano" tra di loro a colpi di startActivity), potresti arrivare ad avere sullo stack delle Activity qualcosa del tipo:

A - B - A - B - A (top)

In pratica più istanze di una tua classe Activity. Facendo "back" col pulsante apposito, ovviamente torni indietro.

Mentre invece il finish() fa chiudere la Activity e la toglie dallo stack. Se la situazione fosse: A ha invocato B con startActivity avresti sullo stack

A - B (top)

Se in B invochi finish(), B viene tolto dallo stack e ritorni alla Activity A

Spero a) di aver detto tutto giusto (non sono ancora ferratissimo di Android) e b) di esserti stato perlomeno di aiuto.
Andrea, SCJP 5 (91%) – SCWCD 5 (94%)
www.andbin.net

Offline Qwertid

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
Re:Andare avanti e indietro tra 2 activity
« Risposta #2 il: 13 Settembre 2011, 18:38:07 CEST »
0
Innanzi tutto, ti ringrazio molto per la risposta: anche io sono un newbie di Android e piano piano sto cominciando a mettere insieme tanti mattoncini  :-) Prima o poi il grattacielo verrà su  :-)

Il meccanismo che hai spiegato mi era chiaro e mi trovo concorde con quello che hai scritto: ho pensato infatti di organizzare la struttura del problema così.

Nell'activity A, inseriro un intent che richiama l'activity B mentre nell'activity B inserirò un finish così che una volta "guardata" si torni ad A.

L'unico effetto collaterale che mi viene in mente è che B ogni volta dovrà "ricostruirsi" dall'inizio. E' evitabile una cosa del genere?


In più per la mia applicazione non posso usare il tasto back, perciò voglio simularlo con un semplice tocco sullo schermo: in fondo per la struttura che intendo dare all'applicazione, back non farebbe altro che chiamare finish no?


Grazie :)

Offline Marco_dodo

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    samsung
  • Sistema operativo:
    windows 7
Re:Andare avanti e indietro tra 2 activity
« Risposta #3 il: 10 Settembre 2015, 15:42:07 CEST »
0
Anche io ho lo stesso problema! tu hai risolto?

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Re:Andare avanti e indietro tra 2 activity
« Risposta #4 il: 10 Settembre 2015, 17:29:14 CEST »
0
ciao se lo scopo è ....
activity 1
passo in activity 2
eseguo istruzioni che verranno poi riportati in activity 1
quindi chiudo due e torno in activity 1

un idea potrebbe essere quello di fare uno startactivityforresult
ti posto un esempio ....

main.java

Codice (Java): [Seleziona]
Intent i = new Intent(this, Activity2.class);
        i.putExtra("prova", 1000);
        startActivityForResult(i, 1);

Activity2.java

Codice (Java): [Seleziona]
Bundle extras = getIntent().getExtras();
        int flag;
        if (extras != null) {
            flag = extras.getInt("prova");
        }
        buttonDiControllo.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                if (flag == 1000) {
                   //creo un intenet di ritorno che verrà ripreso dalla Activity1 "main.java"
                   Intent returnIntent = new Intent();
                   returnIntent.putExtra("result", 0);
                   setResult(RESULT_OK, returnIntent);
                   finish();
                }else {
                     //esegui altre istruzioni
                }
            }
        });

quindi torniamo al main e implementiamo quanto segue
Codice (Java): [Seleziona]
@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode == 1) {
            if(resultCode == Activity.RESULT_OK){
                int result=data.getIntExtra("result", -1);
                if (result == 1) {
                    Toast.makeText(getActivity(), "Inserimento ok", Toast.LENGTH_SHORT).show();
                } else Toast.makeText(getActivity(),"Inserimento Non avvenuto",Toast.LENGTH_SHORT).show();

            }
            if (resultCode == Activity.RESULT_CANCELED) {
                Toast.makeText(getActivity(),"Inserimento Cancellato",Toast.LENGTH_SHORT).show();
            }
        }
    }

bye  ;-)

Offline Marco_dodo

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    samsung
  • Sistema operativo:
    windows 7
Re:Andare avanti e indietro tra 2 activity
« Risposta #5 il: 10 Settembre 2015, 17:55:17 CEST »
0
Il realtà a me servirebbe solamente: dalla 1 creo la 2 e dalla 2 posso ritornare alla 1 e poi eventualmente ritornare sulla 2 e così via... cioè una volta che le ho create le vado semplicemente a pescare dallo stack. E' possibile tutto ciò? Grazie Mille!!!