Autore Topic: Passaggio tra Form  (Letto 1084 volte)

Offline systemgvp

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Ideos
  • Play Store ID:
    systemgvp
  • Sistema operativo:
    Windows 7
Passaggio tra Form
« il: 28 Dicembre 2011, 22:20:05 CET »
0
Salve, sono ancora nuovo su Android e mi sono posto questa domanda:

Ho un Form con relativi .java e main.xml e in questo è presente un bottone che cambia il testo di un TextView, ora vorrei creare un secondo Form a cui si acceda dalla pressione di un secondo bottone, e che possa leggere il valore del TextView contenuto nel Form di partenza.

come si fa?

Offline E.Musso

  • Utente junior
  • **
  • Post: 82
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy GT-S5660
  • Play Store ID:
    Emiliano Musso
  • Sistema operativo:
    Windows 7
Re:Passaggio tra Form
« Risposta #1 il: 28 Dicembre 2011, 23:47:28 CET »
0
Ciao,
su Android non parliamo di Form, bensì di Activity. Per poter lanciare u'activity da un'altra, si deve dichiarare un Intent, e poi avviarlo con l'istruzione startActivity, in questo modo:

Codice (Java): [Seleziona]
Intent myIntent = new Intent(Activity_A.this, Activity_B.class);
Activity_A.this.startActivity(myIntent);

dove Activity_A e Activity_B sono i nomi di classe dell'activity che lancia e di quella che viene lanciata.
Un eventuale passaggio di parametri si effettua con l'istruzione putExtra, applicata all'intent:

Codice (Java): [Seleziona]
Intent i = new Intent(A.this, B.class);
i.putExtra("mio_testo", mia_textview.getText().toString());
startActivity(i);

In questo caso, stiamo passando all'intent un parametro di nome "mio_testo", valorizzato con il contenuto del controllo mia_textview (ipotizzando che tu l'abbia preventivamente inizializzato).

Sulla seconda activity, per leggere il parametro passato dovrai utilizzare le seguenti istruzioni:

Codice (Java): [Seleziona]
Bundle extras = getIntent().getExtras();
String  valore_passato = extras.getString("mio_testo");

in questi esempi ho accennato al passaggio di una stringa, ma ovviamente, modificando i tipi, il passaggio di valori può essere fatto per qualsiasi tipo di variabile.
Bollettazione Interventi - Un taglio ai costi di tipografia per professionisti!
--
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato

Offline systemgvp

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Ideos
  • Play Store ID:
    systemgvp
  • Sistema operativo:
    Windows 7
Re:Passaggio tra Form
« Risposta #2 il: 29 Dicembre 2011, 13:34:48 CET »
0
NON VA, ho provato in diversi modi ma appena l'applicazione si apre genera subito un'eccezione e mostra il pulsante "Force close". Eppure ho scritto solo qualche riga di codice.

Per l'Activity di ORIGINE

Codice (Java): [Seleziona]
package passaggiotraform_package.java;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.view.View;
import android.widget.Toast;
import android.widget.TextView;
//per passare al nuovo form
import android.content.Intent;


public class PassaggioTraForm extends Activity {
       
        private Button Bottone;
        private TextView variabile;
       
       
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        //imposta la variabile dal form
        variabile = (TextView) findViewById(R.id.textView1);
       
       
        Bottone.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {    
                Toast.makeText(getBaseContext(), "Bottone premuto",Toast.LENGTH_SHORT).show();
                //crea il nuovo form
                Intent Form2 = new Intent(PassaggioTraForm.this, Form_2.class);
                //trasferisce le variabili
                Form2.putExtra("valore_da_trasferire", variabile.getText().toString());
                //apre il nuovo form
                PassaggioTraForm.this.startActivity(Form2);
            }
           
        });
    }
}

Codice (XML): [Seleziona]
<?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" >

    <TextView
       android:id="@+id/textView1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/testo"
       android:textAppearance="?android:attr/textAppearanceLarge" />

    <Button
       android:id="@+id/button1"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_marginTop="50dp"
       android:text="@string/bottone" />

</LinearLayout>

per quella di DESTINAZIONE

Codice (Java): [Seleziona]
package passaggiotraform_package.java;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class Form_2 extends Activity {
       
        private TextView variabile;
       
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        //imposta la variabile dal form
        variabile = (TextView) findViewById(R.id.textView1);
       
        //riceve le variabili
        Bundle extras = getIntent().getExtras();
        String  valore_ricevuto = extras.getString("valore_da_trasferire");
       
        //mostra il valore
        variabile.setText(valore_ricevuto);
    }
}

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >

    <TextView
       android:id="@+id/textView1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/testo2"
       android:layout_marginTop="100dp"
       android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

non risco a capire cosa no va!

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Passaggio tra Form
« Risposta #3 il: 29 Dicembre 2011, 13:47:20 CET »
0
Se hai un fc devi mettere il logcat.

Offline E.Musso

  • Utente junior
  • **
  • Post: 82
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy GT-S5660
  • Play Store ID:
    Emiliano Musso
  • Sistema operativo:
    Windows 7
Re:Passaggio tra Form
« Risposta #4 il: 29 Dicembre 2011, 13:55:40 CET »
0
Concordo con Ricky sulla questione logcat, ad ogni modo, a naso, potrebbe trattarsi della mancanza del nome package nei parametri extra.
Cioè qualcosa del tipo:

Codice (Java): [Seleziona]
String nome_package = this.getClass().getPackage().getName();
Intent Form2 = new Intent(PassaggioTraForm.this, Form_2.class);
Form2.putExtra(nome_package+".valore_da_trasferire", variabile.getText().toString());
PassaggioTraForm.this.startActivity(Form2);

Ovviamente questo va fatto anche in lettura:

Codice (Java): [Seleziona]
String nome_package = this.getClass().getPackage().getName();
Bundle extras = getIntent().getExtras();
String  valore_ricevuto = extras.getString(nome_package+".valore_da_trasferire");

Comunque, con un log si vede sicuramente il problema
Bollettazione Interventi - Un taglio ai costi di tipografia per professionisti!
--
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Passaggio tra Form
« Risposta #5 il: 29 Dicembre 2011, 13:57:16 CET »
0
Non serve mettere il package, puoi mettere delle stringhe arbitrarie :)

Offline systemgvp

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Ideos
  • Play Store ID:
    systemgvp
  • Sistema operativo:
    Windows 7
Re:Passaggio tra Form
« Risposta #6 il: 29 Dicembre 2011, 14:25:35 CET »
0
Trovando un pò di esempi in internet ho cambiato un pò, ma il risultato è sempre uguale,

ORIGINE

Codice (Java): [Seleziona]
package passaggiotraform_package.java;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.view.View;
//import android.widget.Toast;
import android.widget.TextView;
//per passare al nuovo form
import android.content.Intent;


public class PassaggioTraForm extends Activity {
       
        private Button Bottone;
        private TextView variabile;
       
        //nuovi form
        Intent intent;
       
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        //imposta la variabile dal form
        variabile = (TextView) findViewById(R.id.textView1);
        String stringa = variabile.getText().toString();
       
        //crea il nuovo form
        intent = new Intent(getApplicationContext(), Form_2.class);    
        //recupera il nome del pacchetto
        String pkg = getPackageName();
        //trasferisce le variabili
        intent.putExtra(pkg+".valore_da_trasferire", stringa);
       
       
        Bottone.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {    
                //Toast.makeText(getBaseContext(), "Bottone premuto",Toast.LENGTH_SHORT).show();               
                //apre il nuovo form
                startActivity(intent);
            }
           
        });
    }
}

Codice (XML): [Seleziona]
<?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" >

    <TextView
       android:id="@+id/textView1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/testo"
       android:textAppearance="?android:attr/textAppearanceLarge" />

    <Button
       android:id="@+id/button1"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_marginTop="50dp"
       android:text="@string/bottone" />

</LinearLayout>

DESTINAZIONE

Codice (Java): [Seleziona]
package passaggiotraform_package.java;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
//per passare al nuovo form
import android.content.Intent;

public class Form_2 extends Activity {
       
        private TextView variabile;
       
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.form2);
        //imposta la variabile dal form
        variabile = (TextView) findViewById(R.id.textView1);

        //recupera l'intent di questa activity
        Intent intent=getIntent();
        //recupera il nome del pacchetto
        String pkg=getPackageName();
       
        //riceve le variabili
        Bundle extras = getIntent().getExtras();
        String  valore_ricevuto = extras.getString(pkg+".valore_da_trasferire");
       
        //mostra il valore
        variabile.setText(valore_ricevuto);
    }
}

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >

    <TextView
       android:id="@+id/textView1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/testo2"
       android:layout_marginTop="100dp"
       android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

MANIFEST

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="passaggiotraform_package.java"
   android:versionCode="1"
   android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <application
       android:icon="@drawable/ic_launcher"
       android:label="@string/app_name" >
        <activity
           android:name=".PassaggioTraForm"
           android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
           android:name=".Form_2"
           android:label="@string/app_name" >
        </activity>
    </application>

</manifest>

LOGCAT

Codice: [Seleziona]
12-29 13:21:25.273: D/AndroidRuntime(322): Shutting down VM
12-29 13:21:25.273: W/dalvikvm(322): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
12-29 13:21:25.284: E/AndroidRuntime(322): FATAL EXCEPTION: main
12-29 13:21:25.284: E/AndroidRuntime(322): java.lang.RuntimeException: Unable to start activity ComponentInfo{passaggiotraform_package.java/passaggiotraform_package.java.PassaggioTraForm}: java.lang.NullPointerException
12-29 13:21:25.284: E/AndroidRuntime(322):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
12-29 13:21:25.284: E/AndroidRuntime(322):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
12-29 13:21:25.284: E/AndroidRuntime(322):         at android.app.ActivityThread.access$2300(ActivityThread.java:125)
12-29 13:21:25.284: E/AndroidRuntime(322):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
12-29 13:21:25.284: E/AndroidRuntime(322):         at android.os.Handler.dispatchMessage(Handler.java:99)
12-29 13:21:25.284: E/AndroidRuntime(322):         at android.os.Looper.loop(Looper.java:123)
12-29 13:21:25.284: E/AndroidRuntime(322):         at android.app.ActivityThread.main(ActivityThread.java:4627)
12-29 13:21:25.284: E/AndroidRuntime(322):         at java.lang.reflect.Method.invokeNative(Native Method)
12-29 13:21:25.284: E/AndroidRuntime(322):         at java.lang.reflect.Method.invoke(Method.java:521)
12-29 13:21:25.284: E/AndroidRuntime(322):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-29 13:21:25.284: E/AndroidRuntime(322):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-29 13:21:25.284: E/AndroidRuntime(322):         at dalvik.system.NativeStart.main(Native Method)
12-29 13:21:25.284: E/AndroidRuntime(322): Caused by: java.lang.NullPointerException
12-29 13:21:25.284: E/AndroidRuntime(322):         at passaggiotraform_package.java.PassaggioTraForm.onCreate(PassaggioTraForm.java:38)
12-29 13:21:25.284: E/AndroidRuntime(322):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-29 13:21:25.284: E/AndroidRuntime(322):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
12-29 13:21:25.284: E/AndroidRuntime(322):         ... 11 more
12-29 13:21:35.753: I/Process(322): Sending signal. PID: 322 SIG: 9

Offline E.Musso

  • Utente junior
  • **
  • Post: 82
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy GT-S5660
  • Play Store ID:
    Emiliano Musso
  • Sistema operativo:
    Windows 7
Re:Passaggio tra Form
« Risposta #7 il: 29 Dicembre 2011, 14:27:43 CET »
0
Dal log è chiaro: non hai legato la tua variabile "Bottone" ad alcun pulsante del layout usato su PassaggioTraForm.java.
Ecco quindi l'errore di NullPointerException.
Bollettazione Interventi - Un taglio ai costi di tipografia per professionisti!
--
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato

Offline systemgvp

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Ideos
  • Play Store ID:
    systemgvp
  • Sistema operativo:
    Windows 7
Re:Passaggio tra Form
« Risposta #8 il: 29 Dicembre 2011, 14:38:32 CET »
0
GRAZIEEEEE stavo impazzendo, comunque da quale riga del logcat l'hai capito?
sono alle prime armi con questo linguaggio e quindi mi trovo con strumenti nuovi che a volte non riesco a decifrare.

Offline E.Musso

  • Utente junior
  • **
  • Post: 82
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy GT-S5660
  • Play Store ID:
    Emiliano Musso
  • Sistema operativo:
    Windows 7
Re:Passaggio tra Form
« Risposta #9 il: 29 Dicembre 2011, 14:41:14 CET »
0
È un piacere  ;-)
L'ho capito da qui:

Codice (Java): [Seleziona]
12-29 13:21:25.284: E/AndroidRuntime(322): Caused by: java.lang.NullPointerException
12-29 13:21:25.284: E/AndroidRuntime(322):         at passaggiotraform_package.java.PassaggioTraForm.onCreate(PassaggioTraForm.java:38)

Come vedi "lamenta" un NullPointerException, e alla riga successiva ci dice che nel listato PassaggioTraForm.java, alla riga 38, c'è l'istruzione che l'ha causata.
Felice di esserti stato d'aiuto  :-)
Bollettazione Interventi - Un taglio ai costi di tipografia per professionisti!
--
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato