Desarrollo de un app Android (4)
Responder al botón Send
Para al evento on-click, abrimos nuestro layout
main.xml
y agregamos el atributo android:onClick
a la vista <Button>
. Con lo cual nos queda como el siguiente código:
<
Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_send" android:onClick="sendMessage"/>
android:onClick
tiene como valor "sendMessage"
, el cual es el nombre del método que será implementado en nuestra Activity y que será ejecutado cuando el usuraio haga click en el botón.Abre tu Activity e implementa el método de la siguiente manera:
/** Método que se ejecuta cuando el usuario pulsa el botón Send
public void sendMessage(View view){
// Hacer algo en respuesta el evento on-click
}
Debes tener en cuenta que este método debe cumplir las siguientes características:
1. El método debe ser "public"
2. "void" como valor de retorno
3. Debe tener un "view" como único parámetro ( es la View que fue clickada)
Ahora en este método podríamos por ejemplo capturar el texto de EditView y enviarlo a otra activity.
Construir un Intent ( intención )
Un
intent
es un objeto que vincula componentes separados en tiempo de ejecución; como por ejemplo dos actividades. Un intent
representa "una intención de hacer algo"; se pueden usar en una amplia variedad de tareas, siendo la más común iniciar otra activity.
Manos a la obra. Dentro del método
sendMessage
creamos un Intent MostrarMensajeActivity
Intent intent = new Intent(this,
MostrarMensajeActivity
.class);
Debes importar :
import android.content.Intent;
Truco: Si trabajas con Eclipse puedes pulsar Ctrl+Shift+O para importar clases.
El constructor usado para instanciar un Intent recibe dos parámetros:
Context:
- Como primer parámetro
this
por que
Activity
es subclase deContext
Class:
- Es el componente del app al cual se le enviara el intent; en nuestro caso será la clase que será iniciada.
Como hemos mencionado un Intent no solo permite iniciar otras actividades; también podemos enviar información dentro del intent que será útil a la actividad que iniciamos. Dentro del método
sendMessage()
usamos findViewById()
para obtener el EditView
y añadir el valor de su texto al intent
:Intent intent = new Intent(this, MostrarMensajeActivity
.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
Nota: Ahora debemos importar android.widget.EditText
y definir la constante EXTRA_MESSAGE
. Es buena práctica definir el nombre de los extras de un intenet con el nombre del package en caso interactuemos con otras apps.public class MainActivity extends ActionBarActivity { public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE"; ... }
Iniciar la segunda actividad
Para iniciar la segunda actividad lo hacemos con el método
"startActivity()"
y le pasamos el "intent"
. El sistema recibe la llamada e inicia la actividad especificada en el intent
. Con todo esto nuestro método sendMessage()
quedaría así:
public void sendMessage(View view) { Intent intent = new Intent(this,
MostrarMensajeActivity
.class); EditText editText = (EditText) findViewById(R.id.edit_message); String message = editText.getText().toString(); intent.putExtra(EXTRA_MESSAGE, message); startActivity(intent); }
Creando la segunda activity
Lo hacemos como indicamos en el artículo I : Desarrollo de un app Android (1) - Creando un proyecto Android.
Nos queda algo así:
public classextends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mostrar_mensaje); } ...}
MostrarMensajeActivity
Añadir el título a String
Abrimos el fichero
strings.xml
e introudcimos el sigueinte código
<resources> ... <string name="title_activity_display_message">My Message</string> </resources>
Con el fin de mejorar la eficiencia del diseño cuando se especifica el peso se debe cambiar el width(ancho) del
EditText
a cero (0dp).
<EditText
android:layout_weight="1"
android:layout_width="0dp"
... />
Añadir la segunda actividad al manifest
Abrimos el fichero
strings.xml
e introudcimos el sigueinte código
...
<string name="title_activity_display_message">My Message</string>
</resources>
Con el fin de mejorar la eficiencia del diseño cuando se especifica el peso se debe cambiar el width(ancho) del
EditText
a cero (0dp).
<application ... > ... <activity android:name="com.pelusadev.myfirstapp." android:label="@string/title_activity_display_message" android:parentActivityName="com.pelusadev.myfirstapp.MainActivity" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.pelusadev.myfirstapp.MainActivity" /> </activity> </application>
MostrarMensajeActivity
Recibir el intent
En el método
onCreate()
e introducimos el siguiente código
Intent intent = getIntent(); String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
Mostrar el mensaje
En el método
onCreate()
de MostrarMensajeActivity
introducimos el siguiente código:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get the message from the intent
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
// Create the text view
TextView textView = new TextView(this);
textView.setTextSize(40);
textView.setText(message);
// Set the text view as the activity layout
setContentView(textView);
}