Android Bootcamp Santa Fe GTUG
-
Upload
matiasmolinas -
Category
Technology
-
view
2.789 -
download
2
description
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?