Android Bootcamp Santa Fe GTUG

Post on 12-May-2015

2.789 views 2 download

description

Presentacion de Android Bootcamp utilizada por Santa Fe GTUG. Actualizada por Horacio Alvarez.

Transcript of Android Bootcamp Santa Fe GTUG

Android Bootcamp

Elaborado (con adaptaciones) a partir de los tutoriales:

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

¿Qué es una aplicación Android?

Android Application•Java Language•Android SDK: compilar, empaquetar (.apk)

Múltiples actividades relacionadas entre sí•Alta cohesión•Bajo acoplamiento

Android Activity: A single screen with a user interface. Ej: aplicación de email

•Mostrar nuevos emails•Escribir nuevo email•Leer email

Ciclo de vida Android Application

Bootcamp Pen Drive

Por favor, copie desde el pen drive la carpeta BOOTCAMP en alguna carpeta de su notebook

Contenido

android-sdk: entorno de desarrollo Androideclipse: Eclipse Galileo 3.5.0txt: código del tutorialADT-10.0.0.zip: plugin de Android para Eclipse

Prerrequisitos

Java SDK 1.6Android SKD (eliminar carpeta c:\Documents and Settings\...\.android)

Instalación del Plugin ADT en Eclipse

En Eclipse:

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

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

Name: Android Plugin

[x] Developer Tools[ ] DESMARQUE “Contact all update sites..."

Next, Next, Finish..... Restart

Configurar Android SDK en Eclipse

En Eclipse:

Window -> Preferences -> Android

Crear un Virtual Device

Desde Eclipse ingresar al AVD Manager:

AVD Manager -> Virtual Devices-> New

Name: MyAVDTarget: Android 2.1SD Card: -Skin: built-in (HVGA)

Create AVD

Crear un Virtual Device

Iniciar Virtual DeviceStart… Launch

Proyecto Hello WorldEn Eclipse:

File -> New -> Other -> Android Project

Project Name:  HelloWorldBuild Target: Android 2.1Properties:  Application Name:  Hello World  Package Name:  com.example.helloworld  Create Activity:  HelloActivity

Finish

src/com/example/HelloActivity.java

- onCreate()

- Bundle savedInstanceState

- setContentView(R.layout.main);

res/layout/main.xml

Define el layout de la Activity:

LinearLayout TableLayout RelativeLayout

res/layout/main.xml

LinearLayout

res/layout/main.xml

android:orientation="vertical"

android:layout_width / android:layout_height

"fill_parent""wrap_content"

"@string/hello"

res/values/strings.xml

Cadenas de caracteres de la aplicación

Prueba

Project -> Run

(Ctrl + Shift + F11)

Esto es una Activity

Pero es aburrido.

Upgrade: Una lista

Crear res/layout/list_item.xml [código 1.txt]

<?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 item en la lista

Modificar res/layout/main.xml [código: 2.txt]

<?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"><ListViewandroid:id="@+id/mylistview" android:layout_width="fill_parent" android:layout_height="fill_parent" /></LinearLayout>

HelloActivity.java [código: 3.txt]public class HelloActivity extends Activity implements OnItemClickListener {    static final String[] COUNTRIES = { "Brazil",             "Argentina","Mexico" };@Overridepublic 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)

Upgrade: Cuadro de Texto y Botón para Añadir

Modificar main.xml [Código 4.txt]

<?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 [Código: 5.txt]

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 [Código: 5.txt]

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.

¿Cuál es el resultado?

Experimento

El contenido se queda en la lista!

¿Por qué pasa eso?

Experimento 1

Porque Android hace"Activity Lifecycle Management"

y puede mantener activas o cerrar Activities conforme la necesidad

Experimento 2

Cerrar la aplicación (oprimiendo "Home")

Hacer Force Close a traves del menúMenu -> Settings -> Applications -> Manage Apps ->

Hello World -> Force Close

Arrancarla nuevamente desde el menú de aplicaciones.

¿Cuál es el resultado?

Experimento 2

Resultado:

El contenido se fué.

¿Cómo grabar el contenido de unamanera 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 [Código: 6.txt]

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 [Código: 6.txt]

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 [Código: 6.txt]

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...

¿Cómo se puede implementar una búsqueda en la Web en lugar del Toast?

... HelloActivity.java [Código: 7.txt]

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);}

Prueba

Project -> Run

(Ctrl + Shift + F11)

Documentación de Referencia

http://developer.android.com/index.html

•Framework Topics•Android Market Topics•Developing•Publishing•Best Practices•Web Applications•Appendix

¿Preguntas?