Android Bootcamp 101:
Mi primera Aplicación Android
          Leo Fishman
         leo@gtugs.org
       Buenos Aires GTUG
Descarga de Archivos


Por favor, copie la carpeta BOOTCAMP a su
      escritorio (o para donde prefiera)
¿Que es Android?
Componentes de una aplicación

                                 Activities
                 
                       Representa una Pantalla con UI
                   
                       Son independientes entre ellas

    Se pueden referenciar Activities de otras aplicaciones (vía Intent)
                     
                        Extienden de la clase Activity

                                   Services
                           
                             Corren en el background
     
             Para porcesos complejos o para servir a llamadas remotas
                               
                                  No proveen UI
                        
                          Extienden de la clase Service

                               Content Providers
         
              Comparten un conjunto de información de la aplicación
         
              Pueden leer/escribir informacion privada de la aplicación
                    
                      Extienden de la clase ContentProvider

                               Broadcast Recievers
                       
                         Responden a “mensajes generales”
               
                   Pueden crear notificaciones en la barra de estado
                     
                       Extienden de la clase BroadcastReciever
Intents

 Los activities, Service y Broadcast Recivers se activan
mediante mensajes llamados Intents que pueden ser de la
               propia aplicación o de otras.

Para Activities y Services los intents se configuran con una
 Accion (VIEW , SEND; etc.) y una URI que especifica la
 ubicacion de la informacion sobre la que se va a actuar.

    Para los Broadcast Recievers los intents incluyen
         unicamente el “mensaje” que se envió.
Manifest
        
            AndroidManifest.xml , en el carpeta raiz de la aplicación

            
                Registra todos los componentes que conforman la
                  aplicación y sus capacidades de recibir intents.

                
                    Identifica los permisos que requiere la aplicación.

                        
                            Define el nivel mínimo de API a utilizar.


    Define requerimientos de hardware o software requeridos por
                           la aplicación.

    
        Define los APIs ( ademas del Android Framework API) con
                  los que la aplicación va a interactuar.
Activity Lifecycle

             Objetivos

1.Instalar IDE (Eclipse).
2.Instalar el Plugin ADT.

3.Configurar al menos un “Virtual Device” (AVD) o

“Hardware Device”.
4.Crear un Proyecto Android.

5.Construir una aplicación Android.

6.Desplegar la aplicación en un dispositivo
Instalación del Plugin ADT


                En Eclipse:

   Help -> Install New Software.... -> Add

           Name: Android Plugin
          Archive: ADT-10.0.0.zip
        (en la carpeta BOOTCAMP)

          [x] Developer Tools
[ ] DESMARQUE "Check all update sites..."

        Next, next, next....., restart.
Crear un Virtual Device


Window -> AVD Manager -> Virtual Devices->New

               Name: MyAVD
             Target: Android 2.1
                Skin: HVGA

                 Create AVD

                   Close
Proyecto Hello World

     File -> New -> Android Project

        Project Name:   HelloWorld
         Build Target: Android 2.1
                Properties:
       Application Name:  HelloWorld
  Package Name:  com.example.helloworld
        Create Activity:  HelloActivity
src/com/example/HelloActivity.java



            - onCreate()


    - Bundle savedInstanceState


  - setContentView(R.layout.main);
res/layout/main.xml




Define el layout de la Activity
res/layout/main.xml

   LinearLayout
res/layout/main.xml



       android:orientation="vertical"


android:layout_width / android:layout_height

                "fill_parent"
              "wrap_content“

            String Resources:
       en Java: R.string.string_name
       en XML:@string/string_name
res/values/strings.xml




Cadenas de caracteres de la aplicación
Prueba




  Project -> Run

(Ctrl + Shift + F11)
Esto es una Activity
Upgrade: Una lista
Crear res/layout/list_item.xml [1]


          <?xml version="1.0" encoding="utf-8"?>
                          <TextView
xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
           android:layout_height="fill_parent"
                   android:padding="10dp"
                 android:textSize="16sp" >
                         </TextView>


         Define el layout de cada iten en la lista
Modificar res/layout/main.xml [2]
          <?xml version="1.0" encoding="utf-8"?>
                       <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
            android:layout_width="fill_parent"
           android:layout_height="fill_parent"
                              >
                         <ListView
               android:id="@+id/mylistview" 
           android:layout_width="fill_parent"
           android:layout_height="fill_parent"
                             />
                      </LinearLayout>
HelloActivity.java [2]

      public class HelloActivity extends Activity i {
      static final String[] COUNTRIES = { "Brazil",     
                      "Argentina","Mexico" };

                          @Override
     public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
                 setContentView(R.layout.main);

    ListView lv = (ListView) findViewById(R.id.mylistview);
         lv.setAdapter(new ArrayAdapter<String>(this, 
                        R.layout.list_item,
                            COUNTRIES));
                                
                              }
Prueba




  Project -> Run

(Ctrl + Shift + F11)
HelloActivity.java [2]
   public class HelloActivity extends Activity implements
                       OnItemClickListener {
       static final String[] COUNTRIES = { "Brazil",     
                          "Argentina","Mexico" };
                              @Override
     public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                    setContentView(R.layout.main);
    ListView lv = (ListView) findViewById(R.id.mylistview);
         lv.setAdapter(new ArrayAdapter<String>(this, 
                            R.layout.list_item,
                                COUNTRIES));
                  lv.setOnItemClickListener(this);
                                  }
 public void onItemClick(AdapterView<?> parent, View view, 
                          int pos, long id) {
             Toast.makeText(getApplicationContext(), 
                      ((TextView) view).getText(),
                       Toast.LENGTH_SHORT).show();
                                  }
Prueba




  Project -> Run

(Ctrl + Shift + F11)
EditText y Botón para Añadir
Modificar main.xml [4]

                     <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                          android:orientation="vertical"
                        android:layout_width="fill_parent"
                       android:layout_height="fill_parent"
                                          >
                                     <LinearLayout
                         android:layout_width="fill_parent"
                       android:layout_height="wrap_content"
                          android:orientation="horizontal">
                                         <EditText 
                               android:id="@+id/mytextview"
                               android:layout_width="200sp"
                        android:layout_height="wrap_content"
                                       android:text=""/>
                                          <Button 
                                android:id="@+id/mybutton"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                                   android:text="Añadir"/>
                                    </LinearLayout>
                                        <ListView
                              android:id="@+id/mylistview"
                        android:layout_width="fill_parent"
                      android:layout_height="fill_parent"/>
                                   </LinearLayout>
Prueba




  Project -> Run

(Ctrl + Shift + F11)
Ahora vamos a implementar...
HelloActivity.java [5]

             package com.example.helloworld; 

                        import ...

        public class HelloActivity extends Activity
       implements OnItemClickListener, OnClickListener {
                 private List<String> countries = 
                        new ArrayList<String>();
               private ArrayAdapter<String> adapter;
                             @Override
       public void onCreate(Bundle savedInstanceState) {
                 super.onCreate(savedInstanceState);
                    setContentView(R.layout.main);
                        countries.add("Mexico");
                       ListView lv = (ListView) 
                      findViewById(R.id.mylistview);
                 adapter = new ArrayAdapter<String>(
                 this, R.layout.list_item, countries);
                        lv.setAdapter(adapter);
                   lv.setOnItemClickListener(this);
        Button btn = (Button) findViewById(R.id.mybutton);
                     btn.setOnClickListener(this);
                               }
                              ...
... HelloActivity.java [5]




     public void onItemClick(AdapterView<?> parent,
                View view, int pos, long id) {
     Toast.makeText(getApplicationContext(),            
                   ((TextView)view).getText(),
                 Toast.LENGTH_SHORT).show();
                             }

             public void onClick(View view) {
    EditText et = (EditText) findViewById(R.id.mytextview);
            countries.add(et.getText().toString());
                adapter.notifyDataSetChanged();
                             }
Prueba




  Project -> Run

(Ctrl + Shift + F11)
Experimento


Cerrar la aplicación (oprimiendo "Home")


 Arrancarla nuevamente desde el menú
            de aplicaciones.


        ¿Cual es el resultado?
Experimento




El contenido se queda en la lista!


      ¿Por qué pasa eso?
Experimento




       Porque Android hace
 "Activity Lifecycle Management"

y puede mantener activas o cerrar
 Activities conforme la necesidad
Experimento 2


Cerrar la aplicación (oprimindo "Home")

 Hacer Force Close a traves del menú
         Menu -> Manage Apps ->
         Hello World -> Force Close

Arrancarla nuevamente desde el menú
           de aplicaciones.

        ¿Cual es el resultado?
Experimento 2




    Resultado:


El contenido se fué.
¿Como grabar el contenido de una
   manera que sea persistente
 entre sesiones de mi aplicación?
Fácil -> SharedPreferences


Completo -> Base de datos SQLite
SharedPreferences

         SharedPreferences sp =
    getPreferences(MODE_PRIVATE);

                     Leer:
String x = sp.getString("key", "defaultvalue");


                Grabar:
 SharedPreferences.Editor spe = sp.edit();
      spe.putString("key", "value");
             spe.commit();
HelloActivity.java [6]

                  void saveData() {
             SharedPreferences.Editor spe =
           getPreferences(MODE_PRIVATE).edit();
        StringBuilder sb = new StringBuilder();
      for (int i = 0; i < countries.size(); i++)
             sb.append( ((i == 0) ? "" : ";")
                      + countries.get(i));
      spe.putString("countries", sb.toString());
                      spe.commit();
                          }
                  void loadData() {
            SharedPreferences sp =         
               getPreferences(MODE_PRIVATE);
                  String countryList =
                sp.getString("countries",
             "Argentina;Brazil;Chile;Mexico");
    for (String country : countryList.split(";"))
                   countries.add(country);
                          }
HelloActivity.java [6]


   public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
                 setContentView(R.layout.main);
                            loadData();
                     ListView lv = (ListView)
                 findViewById(R.id.mylistview);
          adapter = new ArrayAdapter<String>(this,
                R.layout.list_item, countries);
                      lv.setAdapter(adapter);
               lv.setOnItemClickListener(this);
    Button btn = (Button) findViewById(R.id.mybutton);
                  btn.setOnClickListener(this);
                               }
HelloActivity.java [6]




      public void onClick(View view) {
            EditText et = (EditText)
         findViewById(R.id.mytextview);
    countries.add(et.getText().toString());
        adapter.notifyDataSetChanged();

                  saveData();
                     }
Prueba




  Project -> Run

(Ctrl + Shift + F11)
El "Toast" que aparece cuando se hace
      click en la lista es aburrido...

¿Como se puede implementar un Web
    Search en lugar del Toast?
... HelloActivity.java [7]



    public void onItemClick(AdapterView<?>
                    parent, 
          View view, int pos, long id) {
                     Uri uri =
        Uri.parse("http://en.wikipedia.org/" +
                       "wiki/" +
      Uri.encode(countries.get(pos), null));
           Intent intent = new Intent(
            Intent.ACTION_VIEW, uri);
              startActivity(intent);
                        }
¿Preguntas?
Referencias:


     Elaborado (con adaptaciones) a partir de los tutoriales:

http://developer.android.com/resources/tutorials/hello-world.html
http://developer.android.com/resources/tutorials/views/index.html


                     Para mas información

             http://developer.android.com/index.html
             Android Bootcamp 102 ( próximamente )
http://bsas.gtugs.org/

Más contenido relacionado

PDF
Android bootcamp 101 v2.0
PDF
LabAndroid: Taller "Mi Primera Aplicación Android"
PPT
Introduccion a Android
PPT
Curso Desarrollo Android
PPT
Desarrollo de apps Android basadas en localización
PPT
Desarrollo android - 4 - arquitectura de aplicación
PDF
Creación de varios_ proyectos_ en_una_solución_visual _studio_2010
DOCX
Servicios web
Android bootcamp 101 v2.0
LabAndroid: Taller "Mi Primera Aplicación Android"
Introduccion a Android
Curso Desarrollo Android
Desarrollo de apps Android basadas en localización
Desarrollo android - 4 - arquitectura de aplicación
Creación de varios_ proyectos_ en_una_solución_visual _studio_2010
Servicios web

Destacado (20)

PDF
Tranformational Model of Translational Research that Leverages Educational Te...
PDF
Announcements, 5/6/12
PDF
The Power of Purpose, 10/2/16
PDF
Economics of plutonium recycle 6 nov2015fvh j
PDF
Pu e asian secu_henry6nov2015_j
PDF
Announcements, 11/27/16
PDF
A Skills Beyond School Review of Korea
PPTX
Increased productivity with visual c sharp ide
PDF
In Visible Fellowship Slides, 11/6/11
PPT
Facebook Marketing for Small Business Development Conference
PDF
Announcements, 11/6/11
PDF
国家戦略特区に関する提案(2013年9月11日 大阪府・大阪市)
PDF
Plutonium recycle gilinsky 6 nov2015_j
PDF
Acts Intro Slides, 5/26/13
PPTX
Il magico potere dei Network
PPSX
экспертная компания ооо нпо «руспромэксперт»3
PDF
Announcements, 8/21/11
PDF
Types of Quantitative Research in ECEC Oslo, Norway January 25, 2012
PDF
Open Source Governance v2.5
PDF
Announcements, 1/19/14
Tranformational Model of Translational Research that Leverages Educational Te...
Announcements, 5/6/12
The Power of Purpose, 10/2/16
Economics of plutonium recycle 6 nov2015fvh j
Pu e asian secu_henry6nov2015_j
Announcements, 11/27/16
A Skills Beyond School Review of Korea
Increased productivity with visual c sharp ide
In Visible Fellowship Slides, 11/6/11
Facebook Marketing for Small Business Development Conference
Announcements, 11/6/11
国家戦略特区に関する提案(2013年9月11日 大阪府・大阪市)
Plutonium recycle gilinsky 6 nov2015_j
Acts Intro Slides, 5/26/13
Il magico potere dei Network
экспертная компания ооо нпо «руспромэксперт»3
Announcements, 8/21/11
Types of Quantitative Research in ECEC Oslo, Norway January 25, 2012
Open Source Governance v2.5
Announcements, 1/19/14
Publicidad

Similar a ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES (20)

PDF
Clase 1 Programacion Android
DOCX
Tutorial Nro. 2 de Desarollo de Aplicaciones Móviles con Android
PDF
Preguntasviri
PPT
Android Bootcamp - GTUG Uruguay
DOCX
Aplicaciones moviles clase9 listas
PPTX
Instrucciones y estructuras
PDF
Carlos blanco resumen mm android controles 10pag v5
PPTX
Clases de Programación Android
DOCX
Reportes de aplicaciones
PPSX
PPT
Intro. a Android Instituto Bosc de la Coma en Olot
PPTX
Reconnect(); Sevilla - Universal Windows Platform
PDF
Controles Básicos de Interfaz en Android
PPTX
Iniciación a Android
DOCX
Tutorial Nro 1 de Desarrollo de Aplicaciones Móviles con Android
PPSX
Aplicaciones android
PDF
Preguntas de android
PDF
Preguntas de android
Clase 1 Programacion Android
Tutorial Nro. 2 de Desarollo de Aplicaciones Móviles con Android
Preguntasviri
Android Bootcamp - GTUG Uruguay
Aplicaciones moviles clase9 listas
Instrucciones y estructuras
Carlos blanco resumen mm android controles 10pag v5
Clases de Programación Android
Reportes de aplicaciones
Intro. a Android Instituto Bosc de la Coma en Olot
Reconnect(); Sevilla - Universal Windows Platform
Controles Básicos de Interfaz en Android
Iniciación a Android
Tutorial Nro 1 de Desarrollo de Aplicaciones Móviles con Android
Aplicaciones android
Preguntas de android
Preguntas de android
Publicidad

Último (20)

PPTX
ccna: redes de nat ipv4 stharlling cande
PPTX
ccna: redes de nat ipv4 stharlling cande
PPTX
Presentacion de Alba Curso Auditores Internos ISO 19011
DOCX
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
PDF
Estrategia de apoyo valentina lopez/ 10-3
DOCX
Trabajo grupal.docxjsjsjsksjsjsskksjsjsjsj
PPTX
Control de calidad en productos de frutas
PPT
Protocolos de seguridad y mecanismos encriptación
DOCX
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
PPTX
Reconocimiento-Automatico-de-Placas-Vehiculares-con-IA.pptx
PDF
Taller tecnológico Michelle lobo Velasquez
PDF
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
PDF
capacitación de aire acondicionado Bgh r 410
PDF
Documental Beyond the Code (Dossier Presentación - 2.0)
DOCX
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
PDF
MANUAL de recursos humanos para ODOO.pdf
PPTX
CLAASIFICACIÓN DE LOS ROBOTS POR UTILIDAD
DOCX
TRABAJO GRUPAL (5) (1).docxjsjsjskskksksk
PDF
Distribucion de frecuencia exel (1).pdf
PDF
Estrategia de Apoyo de Daylin Castaño (5).pdf
ccna: redes de nat ipv4 stharlling cande
ccna: redes de nat ipv4 stharlling cande
Presentacion de Alba Curso Auditores Internos ISO 19011
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
Estrategia de apoyo valentina lopez/ 10-3
Trabajo grupal.docxjsjsjsksjsjsskksjsjsjsj
Control de calidad en productos de frutas
Protocolos de seguridad y mecanismos encriptación
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
Reconocimiento-Automatico-de-Placas-Vehiculares-con-IA.pptx
Taller tecnológico Michelle lobo Velasquez
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
capacitación de aire acondicionado Bgh r 410
Documental Beyond the Code (Dossier Presentación - 2.0)
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
MANUAL de recursos humanos para ODOO.pdf
CLAASIFICACIÓN DE LOS ROBOTS POR UTILIDAD
TRABAJO GRUPAL (5) (1).docxjsjsjskskksksk
Distribucion de frecuencia exel (1).pdf
Estrategia de Apoyo de Daylin Castaño (5).pdf

ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

  • 1. Android Bootcamp 101: Mi primera Aplicación Android Leo Fishman leo@gtugs.org Buenos Aires GTUG
  • 2. Descarga de Archivos Por favor, copie la carpeta BOOTCAMP a su escritorio (o para donde prefiera)
  • 4. Componentes de una aplicación Activities  Representa una Pantalla con UI  Son independientes entre ellas  Se pueden referenciar Activities de otras aplicaciones (vía Intent)  Extienden de la clase Activity Services  Corren en el background  Para porcesos complejos o para servir a llamadas remotas  No proveen UI  Extienden de la clase Service Content Providers  Comparten un conjunto de información de la aplicación  Pueden leer/escribir informacion privada de la aplicación  Extienden de la clase ContentProvider Broadcast Recievers  Responden a “mensajes generales”  Pueden crear notificaciones en la barra de estado  Extienden de la clase BroadcastReciever
  • 5. Intents Los activities, Service y Broadcast Recivers se activan mediante mensajes llamados Intents que pueden ser de la propia aplicación o de otras. Para Activities y Services los intents se configuran con una Accion (VIEW , SEND; etc.) y una URI que especifica la ubicacion de la informacion sobre la que se va a actuar. Para los Broadcast Recievers los intents incluyen unicamente el “mensaje” que se envió.
  • 6. Manifest  AndroidManifest.xml , en el carpeta raiz de la aplicación  Registra todos los componentes que conforman la aplicación y sus capacidades de recibir intents.  Identifica los permisos que requiere la aplicación.  Define el nivel mínimo de API a utilizar.  Define requerimientos de hardware o software requeridos por la aplicación.  Define los APIs ( ademas del Android Framework API) con los que la aplicación va a interactuar.
  • 8. Objetivos 1.Instalar IDE (Eclipse). 2.Instalar el Plugin ADT. 3.Configurar al menos un “Virtual Device” (AVD) o “Hardware Device”. 4.Crear un Proyecto Android. 5.Construir una aplicación Android. 6.Desplegar la aplicación en un dispositivo
  • 9. Instalación del Plugin ADT En Eclipse: Help -> Install New Software.... -> Add Name: Android Plugin Archive: ADT-10.0.0.zip (en la carpeta BOOTCAMP) [x] Developer Tools [ ] DESMARQUE "Check all update sites..." Next, next, next....., restart.
  • 10. Crear un Virtual Device Window -> AVD Manager -> Virtual Devices->New Name: MyAVD Target: Android 2.1 Skin: HVGA Create AVD Close
  • 11. Proyecto Hello World File -> New -> Android Project Project Name:   HelloWorld Build Target: Android 2.1 Properties:   Application Name:  HelloWorld   Package Name:  com.example.helloworld   Create Activity:  HelloActivity
  • 12. src/com/example/HelloActivity.java - onCreate() - Bundle savedInstanceState - setContentView(R.layout.main);
  • 14. res/layout/main.xml LinearLayout
  • 15. res/layout/main.xml android:orientation="vertical" android:layout_width / android:layout_height "fill_parent" "wrap_content“ String Resources: en Java: R.string.string_name en XML:@string/string_name
  • 17. Prueba Project -> Run (Ctrl + Shift + F11)
  • 18. Esto es una Activity
  • 20. Crear res/layout/list_item.xml [1] <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dp" android:textSize="16sp" > </TextView> Define el layout de cada iten en la lista
  • 21. Modificar res/layout/main.xml [2] <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:id="@+id/mylistview"  android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>
  • 22. HelloActivity.java [2] public class HelloActivity extends Activity i {     static final String[] COUNTRIES = { "Brazil",              "Argentina","Mexico" }; @Override public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main);     ListView lv = (ListView) findViewById(R.id.mylistview);     lv.setAdapter(new ArrayAdapter<String>(this,          R.layout.list_item,         COUNTRIES));      }
  • 23. Prueba Project -> Run (Ctrl + Shift + F11)
  • 24. HelloActivity.java [2] public class HelloActivity extends Activity implements OnItemClickListener {     static final String[] COUNTRIES = { "Brazil",              "Argentina","Mexico" }; @Override public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main);     ListView lv = (ListView) findViewById(R.id.mylistview);     lv.setAdapter(new ArrayAdapter<String>(this,          R.layout.list_item,         COUNTRIES));     lv.setOnItemClickListener(this); } public void onItemClick(AdapterView<?> parent, View view,      int pos, long id) {     Toast.makeText(getApplicationContext(),          ((TextView) view).getText(),         Toast.LENGTH_SHORT).show(); }
  • 25. Prueba Project -> Run (Ctrl + Shift + F11)
  • 26. EditText y Botón para Añadir
  • 27. Modificar main.xml [4] <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" >     <LinearLayout         android:layout_width="fill_parent"         android:layout_height="wrap_content"         android:orientation="horizontal">         <EditText              android:id="@+id/mytextview"             android:layout_width="200sp"             android:layout_height="wrap_content"             android:text=""/>         <Button              android:id="@+id/mybutton"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="Añadir"/>     </LinearLayout>     <ListView         android:id="@+id/mylistview"         android:layout_width="fill_parent"         android:layout_height="fill_parent"/> </LinearLayout>
  • 28. Prueba Project -> Run (Ctrl + Shift + F11)
  • 29. Ahora vamos a implementar...
  • 30. HelloActivity.java [5] package com.example.helloworld;  import ... public class HelloActivity extends Activity     implements OnItemClickListener, OnClickListener {     private List<String> countries =          new ArrayList<String>();     private ArrayAdapter<String> adapter;     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);         countries.add("Mexico");         ListView lv = (ListView)              findViewById(R.id.mylistview);         adapter = new ArrayAdapter<String>(             this, R.layout.list_item, countries);         lv.setAdapter(adapter);         lv.setOnItemClickListener(this);         Button btn = (Button) findViewById(R.id.mybutton);         btn.setOnClickListener(this); } ...
  • 31. ... HelloActivity.java [5] public void onItemClick(AdapterView<?> parent,     View view, int pos, long id) {     Toast.makeText(getApplicationContext(),                     ((TextView)view).getText(),     Toast.LENGTH_SHORT).show(); } public void onClick(View view) {     EditText et = (EditText) findViewById(R.id.mytextview);     countries.add(et.getText().toString());     adapter.notifyDataSetChanged(); }
  • 32. Prueba Project -> Run (Ctrl + Shift + F11)
  • 33. Experimento Cerrar la aplicación (oprimiendo "Home") Arrancarla nuevamente desde el menú de aplicaciones. ¿Cual es el resultado?
  • 34. Experimento El contenido se queda en la lista! ¿Por qué pasa eso?
  • 35. Experimento Porque Android hace "Activity Lifecycle Management" y puede mantener activas o cerrar Activities conforme la necesidad
  • 36. Experimento 2 Cerrar la aplicación (oprimindo "Home") Hacer Force Close a traves del menú Menu -> Manage Apps -> Hello World -> Force Close Arrancarla nuevamente desde el menú de aplicaciones. ¿Cual es el resultado?
  • 37. Experimento 2 Resultado: El contenido se fué.
  • 38. ¿Como grabar el contenido de una manera que sea persistente entre sesiones de mi aplicación?
  • 39. Fácil -> SharedPreferences Completo -> Base de datos SQLite
  • 40. SharedPreferences SharedPreferences sp = getPreferences(MODE_PRIVATE); Leer: String x = sp.getString("key", "defaultvalue"); Grabar: SharedPreferences.Editor spe = sp.edit(); spe.putString("key", "value"); spe.commit();
  • 41. HelloActivity.java [6] void saveData() {     SharedPreferences.Editor spe =         getPreferences(MODE_PRIVATE).edit();     StringBuilder sb = new StringBuilder();     for (int i = 0; i < countries.size(); i++)         sb.append( ((i == 0) ? "" : ";")             + countries.get(i));     spe.putString("countries", sb.toString());     spe.commit(); } void loadData() {     SharedPreferences sp =                  getPreferences(MODE_PRIVATE);     String countryList =     sp.getString("countries",         "Argentina;Brazil;Chile;Mexico");     for (String country : countryList.split(";"))         countries.add(country); }
  • 42. HelloActivity.java [6] public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main);     loadData();     ListView lv = (ListView)     findViewById(R.id.mylistview);     adapter = new ArrayAdapter<String>(this,     R.layout.list_item, countries);     lv.setAdapter(adapter);     lv.setOnItemClickListener(this);     Button btn = (Button) findViewById(R.id.mybutton);     btn.setOnClickListener(this); }
  • 43. HelloActivity.java [6] public void onClick(View view) {     EditText et = (EditText)     findViewById(R.id.mytextview);     countries.add(et.getText().toString());     adapter.notifyDataSetChanged();     saveData(); }
  • 44. Prueba Project -> Run (Ctrl + Shift + F11)
  • 45. El "Toast" que aparece cuando se hace click en la lista es aburrido... ¿Como se puede implementar un Web Search en lugar del Toast?
  • 46. ... HelloActivity.java [7] public void onItemClick(AdapterView<?> parent,      View view, int pos, long id) {     Uri uri =         Uri.parse("http://en.wikipedia.org/" +         "wiki/" +     Uri.encode(countries.get(pos), null));     Intent intent = new Intent(     Intent.ACTION_VIEW, uri);     startActivity(intent); }
  • 48. Referencias: Elaborado (con adaptaciones) a partir de los tutoriales: http://developer.android.com/resources/tutorials/hello-world.html http://developer.android.com/resources/tutorials/views/index.html Para mas información http://developer.android.com/index.html Android Bootcamp 102 ( próximamente )