PDA

Ver la Versión Completa : [ CONSULTA ] Pasar datos de una activity a otra


Zephys
05/02/15, 20:19:32
Buenas tardes. Estoy programando una app que consta de dos activities. En la principal hay un boton que lanza la segunda activity, y en la segunda un edittext en que introducir datos y un boton que lanza esos datos a la activity principal y los muestra en un Textview. El problema con el que me encuentro es que se genera todo bien, pero al escribir los datos en la segunda activity y pulsar el boton, no se muestra ese dato en la activity principal y no consigo solucionarlo. ¿Alguien sabe como corregirlo? Os dejo el codigo en cuestion.
Xml activity principal

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="5dp" >


<Button
android:id="@+id/btn_enviar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onEnviarClick"
android:text="Provincia/Calculadora/Mail" />
<TextView
android:id="@+id/tvDatosRecibidos"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>


</LinearLayout>


Java activity principal

package com.example.pruebas;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {
TextView tvDatosRecibidos; //TextView donde se mostrára la cadena recibida
String cadenaObtenida;//String donde se guardará la cadena recibida

override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onEnviarClick(View view) {


Intent intent = new Intent(this, Recibir_datos.class);

startActivity(intent);


}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

tvDatosRecibidos = (TextView)findViewById(R.id.tvDatosRecibidos);//Instanciamos(Creamos el objeto) tvDatosRecibidos

Bundle recogerDatos = getIntent().getExtras();//Creamos un objeto de tipo Bundle que guardará todos los datos recibidos
cadenaObtenida = recogerDatos.getString("resultado");//Del Bundle recogerDatos obtenemos la cadena que en la actividad anterior le pusimos de nombre resultado

tvDatosRecibidos.setText(cadenaObtenida);//mostramos la cadena recibida en el TextView


}
}



Xml activity secundaria

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<EditText
android:id="@+id/etCadena"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:hint="Introduce la Provincia"
android:textSize="20sp"/>

<Button
android:id="@+id/miBoton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:onClick="cambiarActividad"
android:text="Cerrar" />


</LinearLayout>


Java activity secundaria

package com.example.pruebas;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.EditText;

public class Recibir_datos extends ActionBarActivity {
EditText etCadena; //Cuadro de texto donde se inserta la cadéna
String contenidoCadena;//Aquí guardaremos el contenido del cuadro de texto par

override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recibir_datos);
etCadena = (EditText)findViewById(R.id.etCadena);//Instanciamos etCadena
}

public void cambiarActividad(View v){
contenidoCadena = etCadena.getText().toString(); //Obtenemos el contenido del cuadro de texto

Intent i = new Intent(this, MainActivity.class);//Creamos un nuevo intent para llamar a la siguiente actividad
i.putExtra("resultado", contenidoCadena);//Guardamos el la cadena en el intent y le ponemos de nombre resultado
startActivity(i);//Ejecutamos la actividad para que muestre la segunda actividad
}

}


:gracias::gracias:

mocelet
05/02/15, 20:54:06
En la actividad principal tienes que llamar a startActivityForResult (http://developer.android.com/reference/android/app/Activity.html#startActivityForResult(android.conte nt.Intent, int))
Y en la secundaria, en vez de startActivity, tienes que llamar a setResult (http://developer.android.com/reference/android/app/Activity.html#setResult(int)). Además, el Intent de la secundaria es simplemente new Intent(), porque no es para lanzar ninguna actividad.

Zephys
05/02/15, 23:23:56
Muchas gracias, he conseguido avanzar un poco, pero me encuentro el mismo problema, no consigo que pase la informacion a la primera activity:gracias:

carliquiss
17/02/15, 16:31:58
Has probado con los bundle? No soy ningún entendido pero me parece que te pueden servir justo para eso

Zephys
24/02/15, 15:44:02
He conseguido terminar el codigo, aquí os lo dejo para aquel que necesite ayuda:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="5dp" >


<Button
android:id="@+id/btn_enviar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onEnviarClick"
android:text="Provincia/Calculadora/Mail" />

<Button
android:id="@+id/btn_provincia"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onProvinciaClick"
android:text="Obtener Provincia" />



</LinearLayout>


package com.example.tarea_pmdm03;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnLongClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class Tarea_PMDM03 extends ActionBarActivity {

public final static String NOME = "com.example.NOME";
private static final int COD_PETICION = 33;

TextView tvDatosRecibidos; //TextView donde se mostrára la cadena recibida
String cadenaObtenida;//String donde se guardará la cadena recibida

override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tarea__pmdm03);

Button boton = (Button) findViewById(R.id.btn_enviar);
boton.setOnLongClickListener(new OnLongClickListener() {
override
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClassName("com.android.calculator2", "com.android.calculator2.Calculator");

startActivity(intent);
return true;
}
});
}

override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.tarea__pmdm03, menu);
return true;
}

public void onEnviarClick(View view) {

Intent intent = new Intent(this, Provincia.class);


startActivityForResult(intent, COD_PETICION);

}



SuppressLint("NewApi")
public void onProvinciaClick(View v) {
Intent intent=getIntent();
String datos= "Su Provincia es: "+intent.getExtras().getString("PROVINCIA");
Toast.makeText(this,datos, Toast.LENGTH_LONG).show();
}

public void finish() {
super.finish();
Toast.makeText(this, "Gracias por probar la aplicación", Toast.LENGTH_SHORT).show();
}

}


Activty secundaria:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<EditText
android:id="@+id/etCadena"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:inputType="text|textCapWords"
android:maxLength="15"
android:hint="Introduce la Provincia"
android:textSize="20sp"/>

<Button
android:id="@+id/miBoton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:onClick="onCerrarClick"
android:text="Cerrar" />


</LinearLayout>




package com.example.tarea_pmdm03;


import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;

public class Provincia extends ActionBarActivity {
public static final String PROVINCIA = null;
String Forma_Pechar_Activity;
EditText etCadena; //Cuadro de texto donde se inserta la cadéna
String contenidoCadena;//Aquí guardaremos el contenido del cuadro de texto para pasarselo a la siguiente actividad


override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_provincia);
etCadena = (EditText)findViewById(R.id.etCadena);//Instanciamos etCadena
}

override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.provincia, menu);
return true;
}

override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void onCerrarClick(View view){
EditText provincia=(EditText) findViewById(R.id.etCadena);
Intent intent =new Intent(Provincia.this, Tarea_PMDM03.class);
intent.putExtra("PROVINCIA", provincia.getText().toString());
startActivity(intent);
finish();
super.finish();
}

}