YOU ARE DOWNLOADING DOCUMENT

Please tick the box to continue:

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


Related Documents