Lanzar unha Activity

De Manuais Informática - IES San Clemente.
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

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="fill_parent"
 4     android:layout_height="fill_parent"
 5     android:orientation="vertical" >
 6 
 7     <TextView
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:text="Dime o teu nome" />
11 
12     <EditText
13         android:id="@+id/et_nome"
14         android:layout_width="match_parent"
15         android:layout_height="wrap_content" />
16 
17     <CheckBox
18         android:id="@+id/chk_destruir"
19         android:layout_width="match_parent"
20         android:layout_height="wrap_content"
21         android:checked="false"
22         android:text="Destruir esta activity ao chamar á nova" />
23 
24     <Button
25         android:id="@+id/btn_enviar"
26         android:layout_width="wrap_content"
27         android:layout_height="wrap_content"
28         android:onClick="onEnviarClick"
29         android:text="Chamar á outra Activity" />
30 
31 </LinearLayout>


A clase Java a activity principal

 1 package com.example.u2_50_lanzaractivity;
 2 
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.view.Menu;
 7 import android.view.View;
 8 import android.widget.CheckBox;
 9 import android.widget.TextView;
10 
11 public class U2_50_LanzarActivity extends Activity {
12 	public final static String NOME = "com.example.NOME";
13 	
14 	@Override
15 	protected void onCreate(Bundle savedInstanceState) {
16 		super.onCreate(savedInstanceState);
17 		setContentView(R.layout.activity_u2_50__lanzar);
18 	}
19 
20 	@Override
21 	public boolean onCreateOptionsMenu(Menu menu) {
22 		// Inflate the menu; this adds items to the action bar if it is present.
23 		getMenuInflater().inflate(R.menu.u2_50__lanzar, menu);
24 		return true;
25 	}
26 
27 	public void onEnviarClick(View view) {
28 		TextView tvNome = (TextView) findViewById(R.id.et_nome);
29 		CheckBox chkDestruir = (CheckBox) findViewById(R.id.chk_destruir);
30 
31 		Intent intent = new Intent(this, RecibirDatos.class);
32 		intent.putExtra(NOME, tvNome.getText().toString());
33 		startActivity(intent);
34 		
35 		if (chkDestruir.isChecked())
36 			finish();
37 	}
38 }
  • 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

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent" >
 5 
 6     <TextView
 7         android:id="@+id/tv_resultado"
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:layout_centerHorizontal="true"
11         android:layout_centerVertical="true"
12         android:text="resultado" />
13 
14     <Button
15         android:id="@+id/btn_pechar"
16         android:layout_width="wrap_content"
17         android:layout_height="wrap_content"
18         android:layout_below="@+id/tv_Resultado"
19         android:layout_centerHorizontal="true"
20         android:onClick="onPecharActivityClick"
21         android:text="Pechar" />
22 
23 </RelativeLayout>


A clase Java da Activity que recibe a chamada

 1 package com.example.u2_50_lanzaractivity;
 2 
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.view.Menu;
 7 import android.view.View;
 8 import android.widget.TextView;
 9 
10 public class RecibirDatos extends Activity {
11 
12 	@Override
13 	protected void onCreate(Bundle savedInstanceState) {
14 		super.onCreate(savedInstanceState);
15 		setContentView(R.layout.activity_recibir_datos);
16 
17 		Intent intent = getIntent();
18 
19 		TextView tvResultado = (TextView) findViewById(R.id.tv_resultado);
20 
21 		tvResultado.setText("Ola "
22 				+ intent.getExtras().getString(U2_50_LanzarActivity.NOME));
23 
24 	}
25 
26 	@Override
27 	public boolean onCreateOptionsMenu(Menu menu) {
28 		// Inflate the menu; this adds items to the action bar if it is present.
29 		getMenuInflater().inflate(R.menu.recibir_datos, menu);
30 		return true;
31 	}
32 
33 	public void onPecharActivityClick(View view) {
34 		finish();
35 	}
36 
37 }
  • 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).