CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: Varioflex con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: gianpassa con ben 9 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 31 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 4 su 4
Discussione:

[Problema] Interazione tra due Activity usando Intent

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    Dec 2009
    Messaggi
    22

    Ringraziamenti
    1
    Ringraziato 2 volte in 2 Posts
    Predefinito

    [Risolto] Interazione tra due Activity usando Intent

    Ragazzi sto avendo un problema con un'applicazione che sto cercando di fare. Questa applicazione quando premo un pulsante deve avviare una nuova Activity precisamente un Media Player semplicissimo e poverissimo di grafica....il problema sta nel fatto che non so come far restituire alla prima Activity il percorso e il brano scelto nella seconda activity (ossia nel media player!)! ho salvato in una stringa il percorso esatto con il nome della canzone( quindi per esempio in una variabile *PATH_NAME avrò /sdcard/NomeCanzone.mp3) ma come faccio a mandarlo all'activity chiamante??Grazie a tutti *
    Ultima modifica di soeca; 22-04-12 alle 17:51

  2.  
  3. #2
    Senior Droid L'avatar di frank17next


    Registrato dal
    Jan 2010
    Località
    Campobasso
    Messaggi
    739
    Smartphone
    GNexus, Galaxy Note, GT 10.1

    Ringraziamenti
    16
    Ringraziato 143 volte in 102 Posts
    Predefinito

    Quote Originariamente inviato da soeca Visualizza il messaggio
    Ragazzi sto avendo un problema con un'applicazione che sto cercando di fare. Questa applicazione quando premo un pulsante deve avviare una nuova Activity precisamente un Media Player semplicissimo e poverissimo di grafica....il problema sta nel fatto che non so come far restituire alla prima Activity il percorso e il brano scelto nella seconda activity (ossia nel media player!)! ho salvato in una stringa il percorso esatto con il nome della canzone( quindi per esempio in una variabile *PATH_NAME avrò /sdcard/NomeCanzone.mp3) ma come faccio a mandarlo all'activity chiamante??Grazie a tutti *

    Ciao,
    se ho ben capito, la tua Activity principale (che chiameremo Activity Padre) deve ricevere dati dall'Activity Secondaria (figlia)?
    In tal caso è presto detto:

    1) Di concetto, si tratta di avviare l'Activity Secondaria (dall'Activity Padre, ovviamente) utilizzando il metodo:
    codice:
    startActivityForResult(intent, requestCode);
    in questo modo predisponi l'activity principale a ricevere qualcosa indietro quando termina l'activity figlia.
    2)
    Per catturare valori di ritorno dall'activity figlia, l'activity padre utilizza il metodo:
    codice:
    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        [...]
    }
    che, con dei return_code univoci, riesce ad individuare i dati da prelevare dall'activity figlia.
    3) Per contro, l'activity figlia, deve, prima di 'morire', preparare i dati da inviare indietro e consegnarli con il metodo:
    codice:
    setResult(RESULT_OK,intentReturnData);
    In questo modo riesci a catturare i risultati.
    In soldoni, vi è differenza nei metodi di start activity: differiscono nel caso l'invio dati è solo send o send/return.
    Per farti un esempio semplice, considera queste due classi. La prima Activity lancia tramite un button la seconda e gli passa la stringa di testo contenuta nell'EditText del layout principale, ad essa associata.
    Quando viene lanciata la seconda activity, figlia, questa prende i dati dalla prima con il metodo getIntent().getStringExtra("nomeStringa");
    La seconda activity ha un layout uguale alla prima, solo che l'editText della seconda Activity conterrà il valore (in questo caso una stringa) da consegnare, al finish(), all'activity principale, cioè quella da cui è stata lanciata:

    Activity Principale:
    codice:
    package lab.frank.app;
    
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    
    public class ActivityPrincipale extends Activity {
        Button pulsanteAvviaSecondaActivity;
        EditText editText1;
        Context contesto;
        TextView textViewValoreDiRitorno;
        int REQUEST_CODE = 0;
    	/** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            contesto = this.getApplicationContext();
            pulsanteAvviaSecondaActivity = (Button)findViewById(R.id.pulsanteActivitySecondaria);
            editText1 = (EditText)findViewById(R.id.editText1);
            textViewValoreDiRitorno = (TextView)findViewById(R.id.textViewValoreDiRitorno);
            
            pulsanteAvviaSecondaActivity.setOnClickListener(new OnClickListener() {
            	public void onClick(View v){
            		Bundle bundle = new Bundle();
            		Intent intentSecondaActivity = new Intent(contesto, secondActivity.class);
            		bundle.putString("testoPrimaActivity", editText1.getText().toString());
            		intentSecondaActivity.putExtras(bundle);
            		startActivityForResult(intentSecondaActivity, REQUEST_CODE);
            	}
            });
            
        }// end onCreate
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        	if (resultCode == RESULT_OK) {    		
        		textViewValoreDiRitorno.setText(data.getStringExtra("ValoreDiRitorno"));
        	}
        }
    }//end Class
    Activity Secondaria:

    codice:
    package lab.frank.app;
    
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    
    public class secondActivity extends Activity{
    	String testoRicevutoDaMainActivity;
    	TextView textViewTestoRicevutoDaPrimaActivity;
    	Context contesto;
    	Button pulsanteInviaStringaActivityPadre;
    	EditText editTextStringaDiRitorno;
    	@Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.secondactivity);
            contesto = this.getApplicationContext();
            textViewTestoRicevutoDaPrimaActivity = (TextView)findViewById(R.id.textViewStringaProvenienteDaMainActivity);        
            textViewTestoRicevutoDaPrimaActivity.setText(getIntent().getStringExtra("testoPrimaActivity"));
            pulsanteInviaStringaActivityPadre = (Button)findViewById(R.id.buttonInviaTextAdActivityPrincipale);
            editTextStringaDiRitorno = (EditText)findViewById(R.id.editTextStringaDaInviareVersoActivityPrincipale);
            
            pulsanteInviaStringaActivityPadre.setOnClickListener(new OnClickListener() {
            	public void onClick(View v){
            		Intent intentReturnData = new Intent();
            		intentReturnData.putExtra("ValoreDiRitorno", editTextStringaDiRitorno.getText().toString());
            		setResult(RESULT_OK,intentReturnData);
            		finish();
            	}
            });
    	}
    }
    Layout Principale assegnato alla prima Activity con metodo setContentView in fase di OnCreate():
    codice:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
       <EditText
            android:id="@+id/editText1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Text da passare a SecondActivity..." >
            <requestFocus />
        </EditText>
        <Button
            android:id="@+id/pulsanteActivitySecondaria"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Avvia Activity Secondaria" />
    
        <TextView
            android:id="@+id/textViewValoreDiRitorno"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="TextView" />
    </LinearLayout>
    Layout secondario assegnato alla seconda Activity (figlia) con metodo setContentView in fase di OnCreate():
    codice:
    
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical" >
          
            <TextView
                android:id="@+id/textViewStringaProvenienteDaMainActivity"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="TextView" />
    
            <EditText
                android:id="@+id/editTextStringaDaInviareVersoActivityPrincipale"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:ems="10"
                android:hint="Text da inviare all&apos;activity principale" >
    
                <requestFocus />
            </EditText>
    
            <Button
                android:id="@+id/buttonInviaTextAdActivityPrincipale"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Invia Testo Ad Activity Principale" />
    
        </LinearLayout>
    (in androidmanifest.xml chiaramente entrambe le activity vanno dichiarate, ma non credo sia un problema per te).

    Nell'esempio puoi valutare a fondo l'utilizzo dei metodi per lanciare le activity e delle tecniche per inviare e ricevere dati (in questo caso ho usato Bundle in pasto all'Intent di ritorno).

    Spero sia tutto chiaro

    Ciao!
    Ultima modifica di frank17next; 24-04-12 alle 12:44 - Motivo: sistemazione tag [CODE][/CODE]
    Nexus 6 - 5.0.1 Stock
    Nexus 5 - 5.0.1 Stock + Root
    Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

  4. Il seguente Utente ha ringraziato frank17next per il post:

    soeca (22-04-12)

  5. #3
    Baby Droid


    Registrato dal
    Dec 2009
    Messaggi
    22

    Ringraziamenti
    1
    Ringraziato 2 volte in 2 Posts
    Predefinito

    Scusami se rispondo ora e non ho fatto più sapere!Comunque oltre ad aver cliccato sul tasto Thanks non so come ringraziarti!!Mi hai veramente risolto un problema, per me, enorme!!Grazie veramente perché erano giorni che ci sbattevo per far restituire alla prima activity il path ed il nome della canzone!!Ora farò in modo di impostare come suoneria, del timer che sto facendo, la canzone scelta!!!

  6. #4
    Senior Droid L'avatar di frank17next


    Registrato dal
    Jan 2010
    Località
    Campobasso
    Messaggi
    739
    Smartphone
    GNexus, Galaxy Note, GT 10.1

    Ringraziamenti
    16
    Ringraziato 143 volte in 102 Posts
    Predefinito

    Quote Originariamente inviato da soeca Visualizza il messaggio
    Scusami se rispondo ora e non ho fatto più sapere!Comunque oltre ad aver cliccato sul tasto Thanks non so come ringraziarti!!Mi hai veramente risolto un problema, per me, enorme!!Grazie veramente perché erano giorni che ci sbattevo per far restituire alla prima activity il path ed il nome della canzone!!Ora farò in modo di impostare come suoneria, del timer che sto facendo, la canzone scelta!!!
    E' un piacere
    Alla prox
    Nexus 6 - 5.0.1 Stock
    Nexus 5 - 5.0.1 Stock + Root
    Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy