Siguiendo el tema que abrimos ayer, y trabajando sobre la misma aplicacion vamos a abrir una nueva ventana, pasandole unos datos, y que esta al cerrarse nos diga si todo a sido correcto, y nos devuelva otros datos; para ello vamos a ir a nuestra aplicacion y alli abreremos ventana2.java en donde para empezar creamos un boton en ventana2.xml, y le asignamos en la funcion
onClick la funcion
enviarConRespuesta que ahora declararemos declararemos; fuera del metodo OnCreate nuestros editText, para tenerlos accesibles desde toda la clase
public class ventana2 extends Activity{
EditText textNombre;
EditText textEdad;
.....
una vez hagamos esto declararemos la siguiente funcion
public void enviarConRespuesta(View view) {
Intent intent= new Intent(this, abriendoPorCodigo.class);
intent.putExtra("nombre", textNombre.getText().toString());
intent.putExtra("edad", textEdad.getText().toString());
startActivityForResult(intent, 0000);
}
La cual lo unico que hace es declarar una neuva intencion, en la cual abriremos la vista que esta vinculada a abriendoPorCodigo.java; la pasamos 2 datos "extra", los cuales son los textos que tenemos escritos en los EditText, y el secreto viene en la ultima linea, en la que lanzamos la intencion, pero en modo espera de resultado, y le damos un codigo nuestro, para asi que cuando cierre sepamos que nosotros le habiamos mandado y esperamos datos, ya que desde android, cualquier aplicacion puede lanzar activity incluso de otras aplicaciones; despues sobre escibiremos el metodo onActivityResult el cual es el encargado de esperar la respuesta de la otra activity
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 0000 && resultCode ==RESULT_OK){
String resultado = data.getExtras().getString("resultado");
Toast toast = Toast.makeText(getApplicationContext(), resultado, Toast.LENGTH_LONG); toast.show();
}
}
Borramos el codigo que nos mete por defecto eclipse que lo unico que hace es llamar al super(); y en su lugar escribimos un filtro, para que solo actue cuando le llegue el codigo que nosotros hemos definido antes, y que ademas el resultado sea Ok; en ese caso recogemos el "extra" del resultado, o respuesta que nos da la otra activity, y la mostramos en un mensaje emergente.
Por otro lado en abriendoPorCodigo.xml, le borramos el texto al textView que teniamos preparado y en abriendoPorCodigo.java escribimos el siguiente codigo dentro del metodo OnCreate:
Bundle extras = getIntent().getExtras();
String nombre = extras.getString("nombre");
String edad = extras.getString("edad");
TextView label = (TextView) findViewById(R.id.txtVMuestra);
label.setText("Nombre: " + nombre + ", Edad: " + edad);
String textResultado ="Recibido: " + label.getText();
Intent intent = new Intent();
intent.putExtra("resultado",textResultado);
setResult(RESULT_OK, intent);
//finish();
Donde declaramos un Bundle para rescatar los datos enviados por el activity anterior, y le asignamos al textView esos datos, con una pequeña etiqueta descriptiva delante de cada uno; tambien declaramos una variable a la que le asignamos el texto "recibido" y le añadimos el texto que tnemos en el TextView; para finalizar declaramos una intencion simple, en la que añadimos un extra llamado resultado, y le damos el valor declarado en la variable anterior, le asignamos el resultado en Ok, y lo mandamos junto con la intencion.
Opcionalmente podemos añadir la funcion finish(); que lo que hace es cerrar la activity una vez llega a esa linea, por lo que no llegariamos a verla, tan solo notariamos un pequeño parpadeo en pantalla desde que la intentamos abrir desde el activity anterior hasta que vuelve al mismo; prueba hacerlo funcionar con y sin esa linea ;)
Como de costumbre publico el codigo en GitHub aqui te dejo el enlace:
http://adf.ly/LkOgw ;)