Lanzar unha Activity

De Manuais Informática - IES San Clemente.
Revisión del 19:04 26 oct 2014 de Carrion (discusión | contribs.) (→‎A clase Java a activity principal)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Ir a la navegación Ir a la búsqueda

Introdución

  • Cando se crea unha aplicación créase a Activity principal (A pantalla principal').
  • Dende esta Activity pódese chamar a outras Activities (pantallas) da propia aplicación ou doutras.


  • Para lanzar unha unha activity dende outra úsase a clase Intent.
  • Un Intent permite chamar a outros Activities, pasarlles e recoller información, interactuar con servizos do sistema, etc.


  • Na unidade 3 afondarase sobre o ciclo de vida dunha Activity.


Caso práctico

  • Crear o proxecto: U2_50_LanzarActivity.



Creación dunha segunda Activity

  • Pódese facer manualmente ou a través da utilidade que proporciona o IDE para crear unha Activity.

O XML do layout da Activity principal

<?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:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Dime o teu nome" />

    <EditText
        android:id="@+id/et_nome"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <CheckBox
        android:id="@+id/chk_destruir"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:checked="false"
        android:text="Destruir esta activity ao chamar á nova" />

    <Button
        android:id="@+id/btn_enviar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onEnviarClick"
        android:text="Chamar á outra Activity" />

</LinearLayout>


A clase Java a activity principal

package com.example.u2_50_lanzaractivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;

public class U2_50_LanzarActivity extends Activity {
	public final static String NOME = "com.example.NOME";
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_u2_50__lanzar);
	}

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

	public void onEnviarClick(View view) {
		TextView tvNome = (TextView) findViewById(R.id.et_nome);
		CheckBox chkDestruir = (CheckBox) findViewById(R.id.chk_destruir);

		Intent intent = new Intent(this, RecibirDatos.class);
		intent.putExtra(NOME, tvNome.getText().toString());
		startActivity(intent);
		
		if (chkDestruir.isChecked())
			finish();
	}
}
  • Liña 12: Definimos unha constante de tipo String, chamada NOME,
  • Liña 31: Creamos un obxecto de tipo Intent. O construtor recibe 2 parámetros:
    • O primeiro parámetro é unha referencia ao contexto (a clase Activity é unha subclase de Context, por iso poñemos this).
    • O segundo parámetro é a clase que o sistema ‘intentará’ cargar (no noso caso o nome da clase asociada á Activity que desexamos cargar).
  • Liña 32: Pasamos un valor String a través de NOME, definido na liña 12.
  • Liña 33: Lanzamos a Activity
  • Liña 35-36: Se o CheckBox do Layout está marcado entón destruímos esta Activity:
    • Realizar probas marcando e desmarcando esta marca e premendo despois o botón Back.

O XML da Activity que recibe a chamada

<RelativeLayout 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" >

    <TextView
        android:id="@+id/tv_resultado"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="resultado" />

    <Button
        android:id="@+id/btn_pechar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tv_Resultado"
        android:layout_centerHorizontal="true"
        android:onClick="onPecharActivityClick"
        android:text="Pechar" />

</RelativeLayout>


A clase Java da Activity que recibe a chamada

package com.example.u2_50_lanzaractivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;

public class RecibirDatos extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_recibir_datos);

		Intent intent = getIntent();

		TextView tvResultado = (TextView) findViewById(R.id.tv_resultado);

		tvResultado.setText("Ola "
				+ intent.getExtras().getString(U2_50_LanzarActivity.NOME));

	}

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

	public void onPecharActivityClick(View view) {
		finish();
	}

}
  • Para recuperar a información na segunda Activty hai que realizalo cando se está creando a Activity, pode ser nun método a parte chamado dende o onCreate() ou no propio onCreate();
  • Liña 17: Creamos un intent onde recollemos cal foi o intent que iniciou esta Activity.
  • Liña 22: Collemos a información que viña en NOME e a mostramos nunha etiqueta de texto.
  • Liña 34: se se preme o botón de pechar destruirase esta Activity.




-- Ángel D. Fernández González e Carlos Carrión Álvarez -- (2014).