Autore Topic: Apertura di activity random o in sequenza  (Letto 678 volte)

Offline ingmarcofilippini

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung
  • Sistema operativo:
    Windows 10
Apertura di activity random o in sequenza
« il: 16 Luglio 2017, 01:05:05 CEST »
0
Ciao a tutti,
dovrei fare una intent che apre un'activity, però questa activity deve cambiare.
Sono 3 activity e devono andare in sequenza, quindi una volta va una poi quando torna indietro e viene riavviata l'activity ne parte un'altra... sempre un ciclo di 3 activity in sequenza.
Si può fare?
grazie in anticipo

Offline capitancooker

  • Utente junior
  • **
  • Post: 107
  • Marco
  • Respect: +10
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    macOS High Sierra
Re:Apertura di activity random o in sequenza
« Risposta #1 il: 16 Luglio 2017, 09:38:06 CEST »
0
Non so se fa al caso tuo e se ho copreso l'esigenza.
Dall'activity principale, puoi avviare la prima l'activity con startActivityForResult in cui passi come id il valore che indica la sequenza in uso. Quando l'activity avviata viene chiusa, Android esegue onActivityResult nell'activity principale.
Quindi nell'activity principale fai l'override di onActivityResult dove intercetti l'evento e verifichi il valore di ritorno. Quindi procedi con la seconda activity, e così via.
Ciao,
Marco

Se sbaglio, correggetemi.

Offline ingmarcofilippini

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung
  • Sistema operativo:
    Windows 10
Re:Apertura di activity random o in sequenza
« Risposta #2 il: 16 Luglio 2017, 20:06:47 CEST »
0
Non so se fa al caso tuo e se ho copreso l'esigenza.
Dall'activity principale, puoi avviare la prima l'activity con startActivityForResult in cui passi come id il valore che indica la sequenza in uso. Quando l'activity avviata viene chiusa, Android esegue onActivityResult nell'activity principale.
Quindi nell'activity principale fai l'override di onActivityResult dove intercetti l'evento e verifichi il valore di ritorno. Quindi procedi con la seconda activity, e così via.
Ciao,
Marco

Non credo di aver capito bene. Scusami ma non sono ancora molto pratico su Android.
In pratica io adesso ho le seguenti activity: MainActivity, Main2Activity, Main3Activity, Main4Activity: di cui la 2, 3 e 4 sono quelle che girano in sequenza.

Nella MainActivity ho adesso questo codice:
Codice (Java): [Seleziona]
  @Override
            public void onMotionDetected() {
                startActivity(new Intent(MainActivity.this, Main2Activity.class)); // avvia l'altra activity quando si verifica l'evento onMotionDetected
               }

che quando si verifica l'evento onMotionDetected avvia la Main2Activity.
Cosa gli devo impostare per fare sì che attivi ogni volta un'activity diversa tra le 3?
Grazie in anticipo.

Offline capitancooker

  • Utente junior
  • **
  • Post: 107
  • Marco
  • Respect: +10
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    macOS High Sierra
Re:Apertura di activity random o in sequenza
« Risposta #3 il: 16 Luglio 2017, 23:05:15 CEST »
0
In MainActivity metti:
Codice (Java): [Seleziona]
    // codice id per identificare l'activity avviata con startActivityForResult (vedi più in basso)
    private final static int ACTIVITY_2 = 1002;
    private final static int ACTIVITY_3 = 1003;
    private final static int ACTIVITY_4 = 1004;

    // al termine dell'activity (es MainActivity2) viene invocato questo metodo
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode){
            case ACTIVITY_2:
                startActivityForResult(new Intent(MainActivity.this, Main3Activity.class);
                break;
            case ACTIVITY_3:
                startActivityForResult(new Intent(MainActivity.this, Main4Activity.class);
                break;
            case ACTIVITY_4:
                // altro
                break;
        }
    }

Per sftuttare questa funzione, al posto di startActivity usa:
Codice (Java): [Seleziona]
startActivityForResult(new Intent(MainActivity.this, Main2Activity.class), ACTIVITY_UNO);
In parole povere, avviando l'MainActivity2 passi l'ID relativo e quando questa activity viene terminata viene invocato onActivityResult nella MainActivity. Testando il valore di ritorno (requestCode) puoi decidere il passo successivo. Unica raccomandazione è che le activity avviate devono terminare o premendo il tasto back o tramite finish();

Sono novello pure io, quindi se c'è qualcuno che ha soluzioni più eleganti, si accomodi ;-)
Ciao,
Marco
Se sbaglio, correggetemi.

Offline ingmarcofilippini

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung
  • Sistema operativo:
    Windows 10
Re:Apertura di activity random o in sequenza
« Risposta #4 il: 04 Settembre 2017, 18:35:48 CEST »
0
In MainActivity metti:
Codice (Java): [Seleziona]
    // codice id per identificare l'activity avviata con startActivityForResult (vedi più in basso)
    private final static int ACTIVITY_2 = 1002;
    private final static int ACTIVITY_3 = 1003;
    private final static int ACTIVITY_4 = 1004;

    // al termine dell'activity (es MainActivity2) viene invocato questo metodo
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode){
            case ACTIVITY_2:
                startActivityForResult(new Intent(MainActivity.this, Main3Activity.class);
                break;
            case ACTIVITY_3:
                startActivityForResult(new Intent(MainActivity.this, Main4Activity.class);
                break;
            case ACTIVITY_4:
                // altro
                break;
        }
    }

Per sftuttare questa funzione, al posto di startActivity usa:
Codice (Java): [Seleziona]
startActivityForResult(new Intent(MainActivity.this, Main2Activity.class), ACTIVITY_UNO);
In parole povere, avviando l'MainActivity2 passi l'ID relativo e quando questa activity viene terminata viene invocato onActivityResult nella MainActivity. Testando il valore di ritorno (requestCode) puoi decidere il passo successivo. Unica raccomandazione è che le activity avviate devono terminare o premendo il tasto back o tramite finish();

Sono novello pure io, quindi se c'è qualcuno che ha soluzioni più eleganti, si accomodi ;-)
Ciao,
Marco



Non sono riuscito a farlo funzionare.
Dove sbaglio?

Io attualmente ho questo codice qui nella MainActivity
Codice (Java): [Seleziona]
 @Override
            public void onEvento() {
                Intent i = new Intent(MainActivity.this,Main2Activity.class);
                startActivity(i);
                finish();
               }

Come faccio a dirgli che una volta si vede l'activity1, una volta la 2 ed un'altra la 3?

Offline capitancooker

  • Utente junior
  • **
  • Post: 107
  • Marco
  • Respect: +10
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    macOS High Sierra
Re:Apertura di activity random o in sequenza
« Risposta #5 il: 04 Settembre 2017, 19:00:53 CEST »
0
Prova ad inserire questo codice (sostituisce onEvento()):

Codice (Java): [Seleziona]
   private final static int ACTIVITY_2 = 1002;
    private final static int ACTIVITY_3 = 1003;
    private final static int ACTIVITY_4 = 1004;

@Override
     public void onEvento() {
                Intent i = new Intent(MainActivity.this,Main2Activity.class);
                startActivityForResult(new Intent(MainActivity.this, Main2Activity.class), ACTIVITY_2);
                // finish(); <--non terminare l'attività principale
     }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode){
            case ACTIVITY_2:
                startActivityForResult(new Intent(MainActivity.this, Main3Activity.class), ACTIVITY_3);
                break;
            case ACTIVITY_3:
                startActivityForResult(new Intent(MainActivity.this, Main4Activity.class), ACTIVITY_4);
                break;
            case ACTIVITY_4:
                // altro
                break;
        }
    }

Questo esempio avvia Main2Activity e al termine della stessa avvia automaticamente Main3Activity e al termine della stessa avvia Main4Activity.... che al mercato mio padre comprò  :D

Sempre che sia quello che vuoi ottenere.

Ciao,
Marco
Se sbaglio, correggetemi.

Offline ingmarcofilippini

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung
  • Sistema operativo:
    Windows 10
Re:Apertura di activity random o in sequenza
« Risposta #6 il: 04 Settembre 2017, 20:20:47 CEST »
0
Prova ad inserire questo codice (sostituisce onEvento()):

Codice (Java): [Seleziona]
   private final static int ACTIVITY_2 = 1002;
    private final static int ACTIVITY_3 = 1003;
    private final static int ACTIVITY_4 = 1004;

@Override
     public void onEvento() {
                Intent i = new Intent(MainActivity.this,Main2Activity.class);
                startActivityForResult(new Intent(MainActivity.this, Main2Activity.class), ACTIVITY_2);
                // finish(); <--non terminare l'attività principale
     }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode){
            case ACTIVITY_2:
                startActivityForResult(new Intent(MainActivity.this, Main3Activity.class), ACTIVITY_3);
                break;
            case ACTIVITY_3:
                startActivityForResult(new Intent(MainActivity.this, Main4Activity.class), ACTIVITY_4);
                break;
            case ACTIVITY_4:
                // altro
                break;
        }
    }

Questo esempio avvia Main2Activity e al termine della stessa avvia automaticamente Main3Activity e al termine della stessa avvia Main4Activity.... che al mercato mio padre comprò  :D

Sempre che sia quello che vuoi ottenere.

Ciao,
Marco

Mmmm no non è proprio come voglio.
Quando finisce Main2Activity, deve tornare a MainActivity ed aspettare che onEvento gli ridia "il via" per mostrare un'activity (che dovrà essere la main3... dopo ancora la main4..

scusami, grazie mille per il tempo

Offline capitancooker

  • Utente junior
  • **
  • Post: 107
  • Marco
  • Respect: +10
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    macOS High Sierra
Re:Apertura di activity random o in sequenza
« Risposta #7 il: 04 Settembre 2017, 20:31:22 CEST »
0
Se segui la stessa logica puoi fare quello che ti serve:
Codice (Java): [Seleziona]
    private int started = 1001;
    private final static int ACTIVITY_2 = 1002;
    private final static int ACTIVITY_3 = 1003;
    private final static int ACTIVITY_4 = 1004;

    @Override
    public void onEvento() {
       
        switch (started){
            case ACTIVITY_2:
                startActivityForResult(new Intent(MainActivity.this, Main3Activity.class), ACTIVITY_3);
                break;

            case ACTIVITY_3:
                startActivityForResult(new Intent(MainActivity.this, Main4Activity.class), ACTIVITY_4);
                break;

            case ACTIVITY_4:
                // etc
                break;
           
            default:
                startActivityForResult(new Intent(MainActivity.this, Main2Activity.class), ACTIVITY_2);
                break;
               
        }
    }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        started = requestCode;
    }
   
Se sbaglio, correggetemi.

Offline ingmarcofilippini

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung
  • Sistema operativo:
    Windows 10
Re:Apertura di activity random o in sequenza
« Risposta #8 il: 04 Settembre 2017, 20:40:10 CEST »
0
Se segui la stessa logica puoi fare quello che ti serve:
Codice (Java): [Seleziona]
    private int started = 1001;
    private final static int ACTIVITY_2 = 1002;
    private final static int ACTIVITY_3 = 1003;
    private final static int ACTIVITY_4 = 1004;

    @Override
    public void onEvento() {
       
        switch (started){
            case ACTIVITY_2:
                startActivityForResult(new Intent(MainActivity.this, Main3Activity.class), ACTIVITY_3);
                break;

            case ACTIVITY_3:
                startActivityForResult(new Intent(MainActivity.this, Main4Activity.class), ACTIVITY_4);
                break;

            case ACTIVITY_4:
                // etc
                break;
           
            default:
                startActivityForResult(new Intent(MainActivity.this, Main2Activity.class), ACTIVITY_2);
                break;
               
        }
    }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        started = requestCode;
    }
   


Grazie Marco,
mi sembra ottima, non l'ho ancora provata, spero funzioni!

Nelle 3 activity non devo mettere nulla?

Nelle 3 activity adesso ho questo codice per tornare alla mainactivity
Codice (Java): [Seleziona]
  myVideo.setOnCompletionListener(new MediaPlayer.OnCompletionListener() // funzione fine video

        {
            @Override
            public void onCompletion(MediaPlayer mp) // quando il video finisce
            {
                startActivity(new Intent(Main2Activity.this, MainActivity.class)); // avvia l'altra activity alla fine del video
            }

        });

Offline capitancooker

  • Utente junior
  • **
  • Post: 107
  • Marco
  • Respect: +10
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    macOS High Sierra
Re:Apertura di activity random o in sequenza
« Risposta #9 il: 04 Settembre 2017, 20:41:52 CEST »
0
No, metti finish() e basta, togli lo startActivity.
Ciao,
Marco
Se sbaglio, correggetemi.

Offline ingmarcofilippini

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung
  • Sistema operativo:
    Windows 10
Re:Apertura di activity random o in sequenza
« Risposta #10 il: 04 Settembre 2017, 20:48:15 CEST »
0
No, metti finish() e basta, togli lo startActivity.
Ciao,
Marco

Come metto solo finish? Io devo fare che quando finisce il video torni da solo sulla MainActivity.

La MainActivity la termino tutte le volte con finish, ho messo su onpause un finish, è un problema?

Offline capitancooker

  • Utente junior
  • **
  • Post: 107
  • Marco
  • Respect: +10
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    macOS High Sierra
Re:Apertura di activity random o in sequenza
« Risposta #11 il: 04 Settembre 2017, 22:20:44 CEST »
0
Non terminare la MainActivity e metti il finish solo nelle 3 actvity quando termina il video.
Questo le farà ritornare alla MainActivity informandola della chiusura, come descritto in onActivityResult.
Se sbaglio, correggetemi.

Offline ingmarcofilippini

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung
  • Sistema operativo:
    Windows 10
Re:Apertura di activity random o in sequenza
« Risposta #12 il: 05 Settembre 2017, 20:43:41 CEST »
0
Non terminare la MainActivity e metti il finish solo nelle 3 actvity quando termina il video.
Questo le farà ritornare alla MainActivity informandola della chiusura, come descritto in onActivityResult.

Ma la MainActivity devo terminarla per forza perchè altrimenti non funziona l'app... in pratica mantiene in memoria un'immagine e quindi non fà quello che dovrebbe fare.

Offline capitancooker

  • Utente junior
  • **
  • Post: 107
  • Marco
  • Respect: +10
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    macOS High Sierra
Re:Apertura di activity random o in sequenza
« Risposta #13 il: 05 Settembre 2017, 21:15:04 CEST »
0
Usando onActivityResult dovresti poter rimuovere o ricaricare l'immagine che resta in memoria.
Se sbaglio, correggetemi.