Android Bootcamp Elaborado (com adaptações) a partir dos tutoriais: http://developer.android.com/resources/tutorials/hello-world.html http://developer.android.com/resources/tutorials/views/index.html
Bootcamp Pen Drive Por favor, copie a partir do pen drive a pasta BOOTCAMP para o seu notebook.
Instalação do Plugin ADT No Eclipse: Help -> Install New Software... -> Add Name: Android Plugin Archive: ADT-10.0.0.zip (no diretório BOOTCAMP) [x] Developer Tools [ ] DESMARQUE "Check all update sites..." Next, next, next..., restart.
Configurar Localização do SDK No Eclipse: Preferences -> Android SDK Location: BOOTCAMP/android-sdk.../ Clicar "Apply" Clicar "OK"
Criar um Virtual Device Window -> AVD Manager -> Virtual Devices->New Name: MyAVD Target: Android 2.1 Resolution/Built-In: HVGA Create AVD Close
Projeto Hello World File -> New -> Android Project Project Name: Hello World Build Target: Android 2.1 Properties: Application Name: Hello World Package Name: com.example.helloworld Create Activity: HelloActivity
src/com/example/helloactivity.java - oncreate() - Bundle savedinstancestate - setcontentview(r.layout.main);
Android Application Lifecycle
res/layout/main.xml Define o layout da Activity
LinearLayout res/layout/main.xml
res/layout/main.xml android:orientation="vertical" android:layout_width / android:layout_height "fill_parent" "wrap_content" "@string/hello"
res/values/strings.xml Cadeias de caracteres da aplicação
Teste Project -> Run (Ctrl + Shift + F11)
Isto é uma atividade
Hello World é legal... mas é chato.
Upgrade: Uma 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 o layout de cada item da 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 [3] 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(); }
Teste Project -> Run (Ctrl + Shift + F11)
EditText e Botão para Adicionar
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="adicionar"/> </LinearLayout> <ListView android:id="@+id/mylistview" android:layout_width="fill_parent" android:layout_height="fill_parent"/> </LinearLayout>
Teste Project -> Run (Ctrl + Shift + F11)
Agora vamos implementar...
package com.example.helloworld; import... HelloActivity.java [5] 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(); }
Teste Project -> Run (Ctrl + Shift + F11)
Experimento Fechar a aplicação (apertando "Home") Iniciar novamente a partir do menu de aplicações. Qual é o resultado?
Resultado O conteúdo continua na lista. Por que isso acontece?
Experimento Porque o Android faz "Activity Lifecycle Management"...e pode manter ativas ou fechar Activities conforme a necessidade
Experimento 2 Fechar a aplicação (apertando "Home") Fazer Force Close através do menu Menu -> Manage Apps -> Hello World -> Force Close Iniciar novamente a partir do menu de aplicações. Qual é o resultado?
Resultado O conteúdo sumiu.
Persistência Fácil -> SharedPreferences Completo -> SQLite
Fácil -> SharedPreferences Completo -> Base de datos SQLite
SharedPreferences SharedPreferences sp = getpreferences(mode_private); Ler: String x = sp.getstring("key", "defaultvalue"); Gravar: 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();
Teste Project -> Run (Ctrl + Shift + F11)
O "Toast" que aparece quando clicamos na lista também está sem graça... Como se pode implementar uma busca na web no lugar do 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); }
Obrigado!