Top Banner
Aplicações Flexíveis e de fácil manutenção Friday, April 5, 13
108

Mobile conf erich

Jul 26, 2015

Download

Documents

Erich Egert
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Mobile conf erich

Aplicações Flexíveise de fácil manutenção

Friday, April 5, 13

Page 2: Mobile conf erich

à vista10% OFF!

Friday, April 5, 13

Page 3: Mobile conf erich

MOBILECONF10% OFF!

Friday, April 5, 13

Page 4: Mobile conf erich

Erich Egert

encontre-me:@erichegt

github.com/erichegt

Instrutor e desenvolvedor pela Caelum

Friday, April 5, 13

Page 5: Mobile conf erich

Erissssshhhhhh

Friday, April 5, 13

Page 6: Mobile conf erich

Friday, April 5, 13

Page 7: Mobile conf erich

Primeira tela: listagem!

Friday, April 5, 13

Page 8: Mobile conf erich

De onde vêm os dados?

Friday, April 5, 13

Page 9: Mobile conf erich

JSON

Friday, April 5, 13

Page 10: Mobile conf erich

public class ListagemActivity extends Activity {//...

@Override protected void onCreate(Bundle bundle) { //...

try { HttpClient httpclient = new DefaultHttpClient();

HttpGet httpGet = new HttpGet(endereco); HttpResponse resp = httpclient.execute(httpGet);

String jsonCarros = EntityUtils.toString(resp.getEntity()); // colocar no ListView } catch (Exception e) { // ... }

Friday, April 5, 13

Page 11: Mobile conf erich

public class ListagemActivity extends Activity {//...

@Override protected void onCreate(Bundle bundle) { //...

try { HttpClient httpclient = new DefaultHttpClient();

HttpGet httpGet = new HttpGet(endereco); HttpResponse resp = httpclient.execute(httpGet);

String jsonCarros = EntityUtils.toString(resp.getEntity()); // colocar no ListView } catch (Exception e) { // ... }

Quem roda?

Friday, April 5, 13

Page 12: Mobile conf erich

public class ListagemActivity extends Activity {//...

@Override protected void onCreate(Bundle bundle) { //...

try { HttpClient httpclient = new DefaultHttpClient();

HttpGet httpGet = new HttpGet(endereco); HttpResponse resp = httpclient.execute(httpGet);

String jsonCarros = EntityUtils.toString(resp.getEntity()); // colocar no ListView } catch (Exception e) { // ... }

UIThread

Friday, April 5, 13

Page 13: Mobile conf erich

Friday, April 5, 13

Page 14: Mobile conf erich

EM PARALELO!

Friday, April 5, 13

Page 15: Mobile conf erich

AsyncTask

UIThreadThread(tarefa pesada)

Friday, April 5, 13

Page 16: Mobile conf erich

e no fim da tarefa pesada?

JSON

Friday, April 5, 13

Page 17: Mobile conf erich

Tela!

UIThread

Friday, April 5, 13

Page 18: Mobile conf erich

AsyncTask

UIThread

Thread(tarefa pesada)

onPreExecute

doInBackground

UIThread onPostExecute

Friday, April 5, 13

Page 19: Mobile conf erich

AsyncTask

UIThread

Thread(tarefa pesada)

onPreExecute

doInBackground

UIThread onPostExecute

Friday, April 5, 13

Page 20: Mobile conf erich

public class BuscaCarrosTask extends AsyncTask<Void, Void, List<Carro>>{

//...

protected void onPostExecute(final List<Carro> result) {

ListView listaCarros = (...) activity.findViewById(...);

ArrayAdapter<Carro> adapter = new ArrayAdapter<Carro>(...); listaCarros.setAdapter(adapter); listaCarros.setOnItemClickListener(

new OnItemClickListener() { public void onItemClick(...) { Carro carroSelecionado = result.get(posicao);

Friday, April 5, 13

Page 21: Mobile conf erich

public class BuscaCarrosTask extends AsyncTask<Void, Void, List<Carro>>{

//...

protected void onPostExecute(final List<Carro> result) {

ListView listaCarros = (...) activity.findViewById(...);

ArrayAdapter<Carro> adapter = new ArrayAdapter<Carro>(...); listaCarros.setAdapter(adapter); listaCarros.setOnItemClickListener(

new OnItemClickListener() { public void onItemClick(...) { Carro carroSelecionado = result.get(posicao);

UIThread

Friday, April 5, 13

Page 22: Mobile conf erich

public class BuscaCarrosTask extends AsyncTask<Void, Void, List<Carro>>{

//...

protected void onPostExecute(final List<Carro> result) {

ListView listaCarros = (...) activity.findViewById(...);

ArrayAdapter<Carro> adapter = new ArrayAdapter<Carro>(...); listaCarros.setAdapter(adapter); listaCarros.setOnItemClickListener(

new OnItemClickListener() { public void onItemClick(...) { Carro carroSelecionado = result.get(posicao);

UIThread

Friday, April 5, 13

Page 23: Mobile conf erich

Task manipular tela?

Friday, April 5, 13

Page 24: Mobile conf erich

Acoplamento...

Friday, April 5, 13

Page 25: Mobile conf erich

Delegate

Friday, April 5, 13

Page 26: Mobile conf erich

Delegate

Activity

Friday, April 5, 13

Page 27: Mobile conf erich

Delegate

Activity

delega!

Friday, April 5, 13

Page 28: Mobile conf erich

Delegate

Activity AsyncTask

delega!

Friday, April 5, 13

Page 29: Mobile conf erich

Delegate

Activity AsyncTask

delega!

lida com resultado!

Friday, April 5, 13

Page 30: Mobile conf erich

public class BuscaCarrosTask extends AsyncTask<Void, Void, List<Carro>>{

//...

protected void onPostExecute(final List<Carro> result) {

ListView listaCarros = (...) activity.findViewById(...);

ArrayAdapter<Carro> adapter = new ArrayAdapter<Carro>(...); listaCarros.setAdapter(adapter); listaCarros.setOnItemClickListener(

new OnItemClickListener() { public void onItemClick(...) { Carro carroSelecionado = result.get(posicao);

Friday, April 5, 13

Page 31: Mobile conf erich

public class BuscaCarrosTask extends AsyncTask<Void, Void, List<Carro>>{

//...

protected void onPostExecute(final List<Carro> result) {

ListView listaCarros = (...) activity.findViewById(...);

ArrayAdapter<Carro> adapter = new ArrayAdapter<Carro>(...); listaCarros.setAdapter(adapter); listaCarros.setOnItemClickListener(

new OnItemClickListener() { public void onItemClick(...) { Carro carroSelecionado = result.get(posicao);

quemMeChamou.lidaComResultado(result);}

//... Delegate

Ipublic class BuscaCarrosTask( quemMeChamou) {..,}

Friday, April 5, 13

Page 32: Mobile conf erich

Tasks:DELEGATE

Friday, April 5, 13

Page 33: Mobile conf erich

Segunda tela: detalhes!

...

Friday, April 5, 13

Page 34: Mobile conf erich

Activity

Friday, April 5, 13

Page 35: Mobile conf erich

Activity

Intent

Friday, April 5, 13

Page 36: Mobile conf erich

Activity

Intent

Activity

Friday, April 5, 13

Page 37: Mobile conf erich

Activity

Intent

Activity“apelido”

Friday, April 5, 13

Page 38: Mobile conf erich

public void onItemClick(...) { Carro carro = result.get(posicao);

Intent irParaDetalhes = new Intent(this,DetalhesActivity.class); irParaDetalhes.putExtra("carroSelecionado",carro); }

Activity 1

Activity 2protected void onCreate(Bundle savedInstanceState) { TextView modelo = (TextView) findViewById(R.id.modelo); Carro carroSelecionado = (Carro) getIntent() .getSerializableExtra("carroSelecionado"); if (carroSelecionado != null) { modelo.setText(carroSelecionado.getModelo());

Friday, April 5, 13

Page 39: Mobile conf erich

public void onItemClick(...) { Carro carro = result.get(posicao);

Intent irParaDetalhes = new Intent(this,DetalhesActivity.class); irParaDetalhes.putExtra("carroSelecionado",carro); }

Activity 1

Activity 2protected void onCreate(Bundle savedInstanceState) { TextView modelo = (TextView) findViewById(R.id.modelo); Carro carroSelecionado = (Carro) getIntent() .getSerializableExtra("carroSelecionado"); if (carroSelecionado != null) { modelo.setText(carroSelecionado.getModelo());

“carroSelecionado”

Friday, April 5, 13

Page 40: Mobile conf erich

Constantes...

Friday, April 5, 13

Page 41: Mobile conf erich

Activity

Intent

Friday, April 5, 13

Page 42: Mobile conf erich

Activity

Intent

Friday, April 5, 13

Page 43: Mobile conf erich

Activity

Intent

Friday, April 5, 13

Page 44: Mobile conf erich

Activity

Intent

Dalvik

Friday, April 5, 13

Page 45: Mobile conf erich

Activity

Intent

DalvikDalvik

Friday, April 5, 13

Page 46: Mobile conf erich

Como passar deuma VM pra outra?

Friday, April 5, 13

Page 47: Mobile conf erich

Serializar...

0 11101

Friday, April 5, 13

Page 48: Mobile conf erich

Serializar na mesma VM...

0 11101

Friday, April 5, 13

Page 49: Mobile conf erich

Serializar na mesma VM...

0 11101

Friday, April 5, 13

Page 50: Mobile conf erich

Parceable

Friday, April 5, 13

Page 51: Mobile conf erich

Tem mais...

Friday, April 5, 13

Page 52: Mobile conf erich

Friday, April 5, 13

Page 53: Mobile conf erich

Activity 2 em 1?

Friday, April 5, 13

Page 54: Mobile conf erich

Vamos dividir em pedaços!

Friday, April 5, 13

Page 55: Mobile conf erich

Fragment

Friday, April 5, 13

Page 56: Mobile conf erich

IF’s INFINITOS!

==

Fragment

Friday, April 5, 13

Page 57: Mobile conf erich

protected void onCreate(Bundle savedInstanceState) { //...

FragmentManager manager = getSupportFragmentManager();

FragmentTransaction transaction = manager.beginTransaction();

if (isTabletNaHorizontal()) {

transaction.replace(R.id.esquerda, new ListagemFragment()); transaction.replace(R.id.direita,

DetalhesFragment.fragmentComCarro(null));

} else { transaction.replace(R.id.unico, new ListagemFragment()); }

transaction.commit(); }

Friday, April 5, 13

Page 58: Mobile conf erich

protected void onCreate(Bundle savedInstanceState) { //...

FragmentManager manager = getSupportFragmentManager();

FragmentTransaction transaction = manager.beginTransaction();

if (isTabletNaHorizontal()) {

transaction.replace(R.id.esquerda, new ListagemFragment()); transaction.replace(R.id.direita,

DetalhesFragment.fragmentComCarro(null));

} else { transaction.replace(R.id.unico, new ListagemFragment()); }

transaction.commit(); }

Friday, April 5, 13

Page 59: Mobile conf erich

STRATEGY

Friday, April 5, 13

Page 60: Mobile conf erich

public class FabricaDeConteudo { public static Conteudo getConteudo(CarrosActivity activity) {

boolean ehTabletNaHorizontal = activity.getResources().getBoolean(R.bool.ehTabletNaHorizontal);

if (ehTabletNaHorizontal) { return new ConteudoTablet(activity); } else { return new ConteudoSmart(activity); } }}

Friday, April 5, 13

Page 61: Mobile conf erich

public class FabricaDeConteudo { public static Conteudo getConteudo(CarrosActivity activity) {

boolean ehTabletNaHorizontal = activity.getResources().getBoolean(R.bool.ehTabletNaHorizontal);

if (ehTabletNaHorizontal) { return new ConteudoTablet(activity); } else { return new ConteudoSmart(activity); } }}

I

Friday, April 5, 13

Page 62: Mobile conf erich

public class FabricaDeConteudo { public static Conteudo getConteudo(CarrosActivity activity) {

boolean ehTabletNaHorizontal = activity.getResources().getBoolean(R.bool.ehTabletNaHorizontal);

if (ehTabletNaHorizontal) { return new ConteudoTablet(activity); } else { return new ConteudoSmart(activity); } }}

I

Friday, April 5, 13

Page 63: Mobile conf erich

public class CarrosActivity extends FragmentActivity { private Conteudo conteudo;

@Override protected void onCreate(Bundle savedInstanceState) { //... conteudo = FabricaDeConteudo.getConteudo(this);

}

public void lidaComSelecaoDo(Carro carroSelecionado) {

conteudo.lidaComSelecaoDo(carroSelecionado);

}}

Friday, April 5, 13

Page 64: Mobile conf erich

public class CarrosActivity extends FragmentActivity { private Conteudo conteudo;

@Override protected void onCreate(Bundle savedInstanceState) { //... conteudo = FabricaDeConteudo.getConteudo(this);

}

public void lidaComSelecaoDo(Carro carroSelecionado) {

conteudo.lidaComSelecaoDo(carroSelecionado);

}}

OU

Friday, April 5, 13

Page 65: Mobile conf erich

public class CarrosActivity extends FragmentActivity { private Conteudo conteudo;

@Override protected void onCreate(Bundle savedInstanceState) { //... conteudo = FabricaDeConteudo.getConteudo(this);

}

public void lidaComSelecaoDo(Carro carroSelecionado) {

conteudo.lidaComSelecaoDo(carroSelecionado);

}}

OU

OU

Friday, April 5, 13

Page 66: Mobile conf erich

Fragments:Strategy!

Friday, April 5, 13

Page 67: Mobile conf erich

E como ganhar $ facil?

Friday, April 5, 13

Page 68: Mobile conf erich

Venda a mesmaapp varias vezes...

Friday, April 5, 13

Page 69: Mobile conf erich

Friday, April 5, 13

Page 70: Mobile conf erich

AsyncTask

ExpandableListView

Adapter

LayoutInflater

LocationManager

MapActivity

Friday, April 5, 13

Page 71: Mobile conf erich

busao SP

Friday, April 5, 13

Page 72: Mobile conf erich

busao SP

busao AC

Friday, April 5, 13

Page 73: Mobile conf erich

busao SP

busao AC

busao UK

Friday, April 5, 13

Page 74: Mobile conf erich

Dar uma cara nova

Friday, April 5, 13

Page 75: Mobile conf erich

Plural de ônibus?

Friday, April 5, 13

Page 76: Mobile conf erich

Plural de ônibus?

ônibuses

Friday, April 5, 13

Page 77: Mobile conf erich

LÓGICA

Friday, April 5, 13

Page 78: Mobile conf erich

project librariesFriday, April 5, 13

Page 79: Mobile conf erich

Friday, April 5, 13

Page 80: Mobile conf erich

ApplicationResources

Friday, April 5, 13

Page 81: Mobile conf erich

values colors.xmlbackground_geral

Friday, April 5, 13

Page 82: Mobile conf erich

values colors.xmlbackground_geral

values colors.xmlbackground_geral

Friday, April 5, 13

Page 83: Mobile conf erich

Reaproveitamento:Project Libraries!

Flexibilidade:Application Resources!

Friday, April 5, 13

Page 84: Mobile conf erich

comportamentosdiferentes

Friday, April 5, 13

Page 85: Mobile conf erich

Friday, April 5, 13

Page 86: Mobile conf erich

Friday, April 5, 13

Page 87: Mobile conf erich

Fragment

ajuda nesse caso?!?

Friday, April 5, 13

Page 88: Mobile conf erich

Fragment

ajuda nesse caso?!?

Friday, April 5, 13

Page 89: Mobile conf erich

Mas e a Activity?

Friday, April 5, 13

Page 90: Mobile conf erich

Activity

Intent

Dalvik Dalvik

Só serve pra...

Friday, April 5, 13

Page 91: Mobile conf erich

startActivity(this, UmaActivity.class );

Na mesma App...

Friday, April 5, 13

Page 92: Mobile conf erich

startActivity(???.class )

Friday, April 5, 13

Page 93: Mobile conf erich

startActivity(“apelido” )

Friday, April 5, 13

Page 94: Mobile conf erich

AndroidManifest

Activity

“apelido”

Friday, April 5, 13

Page 95: Mobile conf erich

Friday, April 5, 13

Page 96: Mobile conf erich

startActivity(“apelido” )

Friday, April 5, 13

Page 97: Mobile conf erich

startActivity(“apelido” )

Friday, April 5, 13

Page 98: Mobile conf erich

startActivity(“apelido” )

Opis sou euzis!

Friday, April 5, 13

Page 99: Mobile conf erich

Intent Filters

Friday, April 5, 13

Page 100: Mobile conf erich

<activity android:name=".MussumActivity" android:label="@string/app_name" >

<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" />

<data android:host="localhost" android:pathPattern="/acao/customizada/mussum" android:scheme="busao" /> </intent-filter></activity>

AndroidManifest

Friday, April 5, 13

Page 101: Mobile conf erich

Intent i = new Intent(Intent.ACTION_VIEW);

i.setData(Uri.parse("busao://localhost/acao/customizada/"+ getResources().getString( R.string.tag_intent_implicita)));

startActivity(i);

Friday, April 5, 13

Page 102: Mobile conf erich

Baixo acoplamentoe integração:Intent Filters!

Friday, April 5, 13

Page 103: Mobile conf erich

Friday, April 5, 13

Page 104: Mobile conf erich

OBRIGADO!

@erichegtgithub.com/erichegt

Friday, April 5, 13

Page 105: Mobile conf erich

Friday, April 5, 13

Page 106: Mobile conf erich

ORM...

Friday, April 5, 13

Page 107: Mobile conf erich

Friday, April 5, 13

Page 108: Mobile conf erich

Friday, April 5, 13