Autore Topic: Uccidere una Activity  (Letto 937 volte)

Offline gioviiz89

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Liquid A1
  • Sistema operativo:
    Windows 7
Uccidere una Activity
« il: 12 Marzo 2012, 10:26:00 CET »
0
Mi sembra che non ci sia un quesito simile nel forum così ve lo pongo : se ho due Activity all'interno di un task e voglio che l'activity B uccida l'Activity A se questa è già presente nello stack ? come può essere implementato?

grazie anticipatamente :)

Offline cdr89

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: 0
    • Mostra profilo
Re:Uccidere una Activity
« Risposta #1 il: 12 Marzo 2012, 14:27:20 CET »
0
Prova a fare in B:
A.this.finish()

Offline gioviiz89

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Liquid A1
  • Sistema operativo:
    Windows 7
Re:Uccidere una Activity
« Risposta #2 il: 12 Marzo 2012, 14:42:30 CET »
0
Codice (Java): [Seleziona]
public class Activity2 extends Activity {
        Button next,kill;
        int con_start=0,con_resume=0,con_pause=0;
        TextView start,pausa,resume;
       
       
    @Override  
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);
       
       
        TextView start = (TextView) findViewById (R.id.onStart2);
        con_start++;
        start.setText("l'app è stata avviata: "+con_start);
       
        controllobottone();
    }
 /**Gestisce il controllo del bottone alla pressione e l'apertura della seconda ativity*/
    private void controllobottone()
    {
        next=(Button)findViewById(R.id.back);
        next.setOnClickListener(new View.OnClickListener() {
                       
                        public void onClick(View v) {
                               
                                Pressed();
                               
                        }
                });
       
         kill = (Button)findViewById(R.id.Kill);
        kill.setOnClickListener(new View.OnClickListener() {
                       
                        public void onClick(View v) {
                               
                                kill();
                               
                        }
                });
    }
    private void kill()
    {
        //
        // Inserire il testo dell'uccisione di attività
        //
        //
       
       
    }
    private void Pressed()
    {
        Intent myIntent;
        myIntent = new Intent(Activity2.this, Main.class);
        myIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); //questa istruzione impedisce alla Main di invocare una nuova Activity2
                                                                                                                          // e richiama questa messa in pausa
       
       
        startActivity(myIntent);       
    }
}

non funziona e pure ci ho provato :(

spero di essere più chiaro : una volta premuto il pulsante kill si entra in kill() e questo metodo deve gestire l'eliminazione nello stack della activity A

Offline cdr89

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: 0
    • Mostra profilo
Re:Uccidere una Activity
« Risposta #3 il: 12 Marzo 2012, 14:59:31 CET »
0
Se Activity1 chiama la 2, potresti fare dentro la 2:

Codice (Java): [Seleziona]
this.getParent().finish();
In alternativa, dai un occhiata a questo link:

http://developer.android.com/reference/android/app/LocalActivityManager.html#getActivity%28java.lang.String%29

Offline gioviiz89

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Liquid A1
  • Sistema operativo:
    Windows 7
Re:Uccidere una Activity
« Risposta #4 il: 12 Marzo 2012, 15:44:22 CET »
0
Se Activity1 chiama la 2, potresti fare dentro la 2:

Codice (Java): [Seleziona]
this.getParent().finish();
In alternativa, dai un occhiata a questo link:

http://developer.android.com/reference/android/app/LocalActivityManager.html#getActivity%28java.lang.String%29


ti ringrazio per la risposta ma ottengo un force close :(
allego il simpatico log cat :
Codice: [Seleziona]
03-12 14:41:36.618: D/AndroidRuntime(481): Shutting down VM
03-12 14:41:36.618: W/dalvikvm(481): threadid=1: thread exiting with uncaught exception (group=0x40015560)
03-12 14:41:36.638: E/AndroidRuntime(481): FATAL EXCEPTION: main
03-12 14:41:36.638: E/AndroidRuntime(481): java.lang.NullPointerException
03-12 14:41:36.638: E/AndroidRuntime(481):         at it.unibo.gioviiz.Activity2.kill(Activity2.java:109)
03-12 14:41:36.638: E/AndroidRuntime(481):         at it.unibo.gioviiz.Activity2.access$1(Activity2.java:102)
03-12 14:41:36.638: E/AndroidRuntime(481):         at it.unibo.gioviiz.Activity2$2.onClick(Activity2.java:97)
03-12 14:41:36.638: E/AndroidRuntime(481):         at android.view.View.performClick(View.java:2485)
03-12 14:41:36.638: E/AndroidRuntime(481):         at android.view.View$PerformClick.run(View.java:9080)
03-12 14:41:36.638: E/AndroidRuntime(481):         at android.os.Handler.handleCallback(Handler.java:587)
03-12 14:41:36.638: E/AndroidRuntime(481):         at android.os.Handler.dispatchMessage(Handler.java:92)
03-12 14:41:36.638: E/AndroidRuntime(481):         at android.os.Looper.loop(Looper.java:123)
03-12 14:41:36.638: E/AndroidRuntime(481):         at android.app.ActivityThread.main(ActivityThread.java:3683)
03-12 14:41:36.638: E/AndroidRuntime(481):         at java.lang.reflect.Method.invokeNative(Native Method)
03-12 14:41:36.638: E/AndroidRuntime(481):         at java.lang.reflect.Method.invoke(Method.java:507)
03-12 14:41:36.638: E/AndroidRuntime(481):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-12 14:41:36.638: E/AndroidRuntime(481):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-12 14:41:36.638: E/AndroidRuntime(481):         at dalvik.system.NativeStart.main(Native Method)

Offline liuk78

  • Utente junior
  • **
  • Post: 73
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Uccidere una Activity
« Risposta #5 il: 12 Marzo 2012, 16:43:26 CET »
0
Ciao gioviiz89
qual'è l'istruzione alla riga 109 di Activity2?

Offline gioviiz89

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Liquid A1
  • Sistema operativo:
    Windows 7
Re:Uccidere una Activity
« Risposta #6 il: 12 Marzo 2012, 16:51:12 CET »
0
Ciao gioviiz89
qual'è l'istruzione alla riga 109 di Activity2?

Ciao Liuk78! grazie anticipatamente per l'aiuto, la riga incriminata è

Codice (Java): [Seleziona]
this.getParent().finish();

Offline liuk78

  • Utente junior
  • **
  • Post: 73
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Uccidere una Activity
« Risposta #7 il: 12 Marzo 2012, 17:01:33 CET »
+1
Prova a sostituire con questa istruzione e fammi sapere

Codice (Java): [Seleziona]
ActivityA.this.finish();
« Ultima modifica: 12 Marzo 2012, 17:04:31 CET da liuk78 »

Offline gioviiz89

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Liquid A1
  • Sistema operativo:
    Windows 7
Re:Uccidere una Activity
« Risposta #8 il: 12 Marzo 2012, 17:26:54 CET »
0
Prova a sostituire con questa istruzione e fammi sapere

Codice (Java): [Seleziona]
ActivityA.this.finish();


cioè se la mia Activity principale è Main devo scrivere ?


[/code]Main.class.this.finish();

Offline liuk78

  • Utente junior
  • **
  • Post: 73
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Uccidere una Activity
« Risposta #9 il: 12 Marzo 2012, 18:07:18 CET »
0
no, scusa ho risposto troppo in fretta  :-P

http://stackoverflow.com/questions/3410295/finish-parent-and-current-activity-in-android
qui credo che possa trovare la soluzione al tuo problema


Offline gioviiz89

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Liquid A1
  • Sistema operativo:
    Windows 7
Re:Uccidere una Activity
« Risposta #10 il: 13 Marzo 2012, 15:31:55 CET »
0
no, scusa ho risposto troppo in fretta  :-P

http://stackoverflow.com/questions/3410295/finish-parent-and-current-activity-in-android
qui credo che possa trovare la soluzione al tuo problema

Grazie! ora ho fatto un passo avanti.
Al momento questo è quello che ho implementato :

nella activity principale alla pressione di un bottone ho inserito
Codice (Java): [Seleziona]
startActivityForResult(myIntent, requestCode);
ed il metodo che aspetta il risultato della activity 2

Codice (Java): [Seleziona]
  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode==1){
            Toast.makeText(this, "Uccisa", Toast.LENGTH_LONG).show();
            finish();
            Intent myIntent;
                myIntent = new Intent(Main.this, Main.class);
                startActivity(myIntent);
        }
        else{
            Toast.makeText(this, "ERRORE", Toast.LENGTH_LONG).show();
        }
    }

mentre nell'activity 2 ho inserito

Codice (Java): [Seleziona]
private void kill()
    {
        //
        // Inserire il testo dell'uccisione di attività
        //
        //
       
       
         Intent in = new Intent();
         setResult(1,in);
         finish();
    }

il mio problema ora è qui: il "finish()"

io non vorrei che l'activity 2 si chiuda..vorrei che inviasse solo l'ordine alla sua parent di uccidersi e che potessi continuare tranquillamente con l'activity 2 ..dite che è possibile?