Android,

Diseñando una aplicación en Android: (IV) “Tus Perlas”.

En entregas anteriores hemos aprendido lo más básico de Android SDK: desde cómo bajar y configurar nuestro entorno de desarrollo hasta empezar a crear nuestra primera aplicación, creando las clases necesarias de la misma. Todo ello sin entrar demasiado en profundidad en cada una de las partes que explicábamos y teniendo presente que el lector de estas entradas ya estaría familiarizado con algún lenguaje, metodología o entorno de desarrollo. Es un estilo diferente de plantear un curso siendo un poco más practico que la siempre «pura y dura» teoría. Hemos incluido una versión de una  aplicación que despliega elementos básicos, como el menú de opciones. No para que adaptéis este modelo literalmente, sino para que penséis primero antes de programar. Yo creo que es la parte fundamental para que la curva de desarrollo no se vea afectada demasiado con retrasos o sorpresas inesperadas. ¿Que tenemos hasta ahora? Una aplicación ‘tonta’ que todavía no tiene funcionalidad pero que nos enseña a organizar nuestro código, comprender sus partes dentro una mínima complejidad y que permite ir avanzando poco a poco en su desarrollo. Claro que esto es totalmente variable. Tu puedes coger el código  y adaptarlo a tus necesidades, variarlo o destriparlo de la forma que quieras. Está para eso :-)

Vamos a ver la clase que se encarga de mostrar  el menú: TusPerlasMenuActivity.java. Recordamos que hemos iniciado nuestra aplicación con unos gráficos y animaciones de dudoso gusto pero que nos sirven para aprender ;-) y que después de esta pantalla ‘splash’ debería mostrarse nuestro menú. Aquí vamos a definir las acciones («intents», definición abstracta de una acción que va a ser realizada) que permiten mostrar las pantallas subsiguientes de nuestra aplicación.  ¿Que es lo que hace y cómo? Vamos a verlo, paso a paso.

 

TusPerlasMenuActivity

Nuestros imports. Aquí nada reseñable por ahora, solo que hemos incluído AdapterView, ArrayAdapater, ListView y TextView.

package com.tunelko.perlas; 

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

En esta primera parte de la clase construye la lista de opciones y en base al nombre que contiene cada opción lanza un Intent o una Activity diferente (Ayuda, Game, Scores, etc…). En el código hay comentarios que lo explican:

/**
 * @author tunelko.
 * @description Pantalla de menu. Hereda de TusPerlasActivity.
 *
 */

public class TusPerlasMenuActivity extends TusPerlasActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.menu);

        // Buscamos las propiedades del listview (menu.xml) para crear nuestro ListView.
        ListView menuList = (ListView) findViewById(R.id.ListView_Menu);

// metemos en un array los nombres del menu sacados de nuestro res/values/strings.xml
//R.string.nombre_en_el_strings_xml
        String[] items = { getResources	().getString(R.string.menu_item_play),
                getResources().getString(R.string.menu_item_scores),
                getResources().getString(R.string.menu_item_settings),
                getResources().getString(R.string.menu_item_help) };
        // Creamos el ArrayAdapter pasándoles nuestro array de strings 'items'
       // y sacando propiedades de menu_item.xml.
        ArrayAdapter<String> adapt = new ArrayAdapter<String>(this, R.layout.menu_item, items);
        menuList.setAdapter(adapt);
[... más código oculto.]

 

Después lo que hacemos es lo que comentábamos antes, escuchar que acción está detrás de nuestro menú y si pulsamos sobre ella, sacar la pantalla correspondiente. Concretamente, esto lo hacen las lineas:

        // Para las acciones del menu y los new Intent.
        menuList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        	   public void onItemClick(AdapterView<?> parent, View itemClicked, int position, long id) {

                   TextView textView = (TextView) itemClicked;
                   String strText = textView.getText().toString();

Si el literal del menú es ‘Ver y puntuar las perlas’ (sacado del res/values/strings.xml e ignorando mays/min.) entonces lanza TusPerlasGameActivity, si es ‘Ayuda’, TusPerlasAyudaActivity, etc… Tanto startActivity como new Intent vienen de Activity.class(android.app.Activity) e Intent.class (android.content.intent).

 if (strText.equalsIgnoreCase(getResources().getString(R.string.menu_item_play))) {
                       // Lanzamos TusPerlasGameActivity
                       startActivity(new Intent(TusPerlasMenuActivity.this, TusPerlasGameActivity.class));

                   } else if (strText.equalsIgnoreCase(getResources().getString(R.string.menu_item_help))) {
                       // Lanzamos TusPerlasAyudaActivity
                       startActivity(new Intent(TusPerlasMenuActivity.this, TusPerlasAyudaActivity.class));

                   } else if (strText.equalsIgnoreCase(getResources().getString(R.string.menu_item_settings))) {
                       // Lanzamos TusPerlasConfigActivity
                       startActivity(new Intent(TusPerlasMenuActivity.this, TusPerlasConfigActivity.class));

                   } else if (strText.equalsIgnoreCase(getResources().getString(R.string.menu_item_scores))) {
                       // Lanzamos TusPerlasScoreboardActivity
                       startActivity(new Intent(TusPerlasMenuActivity.this, TusPerlasScoreboardActivity.class));
                   }
               }

Ahora, todo junto: TusPerlasMenuActivity.java

package com.tunelko.perlas; 

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

/**
 * @author tunelko.
 * @description Pantalla de menu. Hereda de TusPerlasActivity.
 *
 */

public class TusPerlasMenuActivity extends TusPerlasActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.menu);

        // Buscamos las propiedades del listview (menu.xml) para crear nuestro ListView.
        ListView menuList = (ListView) findViewById(R.id.ListView_Menu);

        // metemos en un array los nombres del menu sacados de nuestro res/values/strings.xml
        String[] items = { getResources	().getString(R.string.menu_item_play),
                getResources().getString(R.string.menu_item_scores),
                getResources().getString(R.string.menu_item_settings),
                getResources().getString(R.string.menu_item_help) };
        // Creamos el ArrayAdapter pasándoles nuestro array de strings items y sacando propiedades de menu_item.xml.
        ArrayAdapter<String> adapt = new ArrayAdapter<String>(this, R.layout.menu_item, items);
        menuList.setAdapter(adapt);

        // Para las acciones del menu y los new Intent.
        menuList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        	   public void onItemClick(AdapterView<?> parent, View itemClicked, int position, long id) {

                   TextView textView = (TextView) itemClicked;
                   String strText = textView.getText().toString();

                   if (strText.equalsIgnoreCase(getResources().getString(R.string.menu_item_play))) {
                       // Lanzamos TusPerlasGameActivity
                       startActivity(new Intent(TusPerlasMenuActivity.this, TusPerlasGameActivity.class));

                   } else if (strText.equalsIgnoreCase(getResources().getString(R.string.menu_item_help))) {
                       // Lanzamos TusPerlasAyudaActivity
                       startActivity(new Intent(TusPerlasMenuActivity.this, TusPerlasAyudaActivity.class));

                   } else if (strText.equalsIgnoreCase(getResources().getString(R.string.menu_item_settings))) {
                       // Lanzamos TusPerlasConfigActivity
                       startActivity(new Intent(TusPerlasMenuActivity.this, TusPerlasConfigActivity.class));

                   } else if (strText.equalsIgnoreCase(getResources().getString(R.string.menu_item_scores))) {
                       // Lanzamos TusPerlasScoreboardActivity
                       startActivity(new Intent(TusPerlasMenuActivity.this, TusPerlasScoreboardActivity.class));
                   }

               }
           });

       }
   }