Mobile conf erich

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

Transcript of Mobile conf erich

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

Friday, April 5, 13

à vista10% OFF!

Friday, April 5, 13

MOBILECONF10% OFF!

Friday, April 5, 13

Erich Egert

encontre-me:@erichegt

github.com/erichegt

Instrutor e desenvolvedor pela Caelum

Friday, April 5, 13

Erissssshhhhhh

Friday, April 5, 13

Friday, April 5, 13

Primeira tela: listagem!

Friday, April 5, 13

De onde vêm os dados?

Friday, April 5, 13

JSON

Friday, April 5, 13

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

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

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

Friday, April 5, 13

EM PARALELO!

Friday, April 5, 13

AsyncTask

UIThreadThread(tarefa pesada)

Friday, April 5, 13

e no fim da tarefa pesada?

JSON

Friday, April 5, 13

Tela!

UIThread

Friday, April 5, 13

AsyncTask

UIThread

Thread(tarefa pesada)

onPreExecute

doInBackground

UIThread onPostExecute

Friday, April 5, 13

AsyncTask

UIThread

Thread(tarefa pesada)

onPreExecute

doInBackground

UIThread onPostExecute

Friday, April 5, 13

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

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

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

Task manipular tela?

Friday, April 5, 13

Acoplamento...

Friday, April 5, 13

Delegate

Friday, April 5, 13

Delegate

Activity

Friday, April 5, 13

Delegate

Activity

delega!

Friday, April 5, 13

Delegate

Activity AsyncTask

delega!

Friday, April 5, 13

Delegate

Activity AsyncTask

delega!

lida com resultado!

Friday, April 5, 13

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

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

Tasks:DELEGATE

Friday, April 5, 13

Segunda tela: detalhes!

...

Friday, April 5, 13

Activity

Friday, April 5, 13

Activity

Intent

Friday, April 5, 13

Activity

Intent

Activity

Friday, April 5, 13

Activity

Intent

Activity“apelido”

Friday, April 5, 13

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

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

Constantes...

Friday, April 5, 13

Activity

Intent

Friday, April 5, 13

Activity

Intent

Friday, April 5, 13

Activity

Intent

Friday, April 5, 13

Activity

Intent

Dalvik

Friday, April 5, 13

Activity

Intent

DalvikDalvik

Friday, April 5, 13

Como passar deuma VM pra outra?

Friday, April 5, 13

Serializar...

0 11101

Friday, April 5, 13

Serializar na mesma VM...

0 11101

Friday, April 5, 13

Serializar na mesma VM...

0 11101

Friday, April 5, 13

Parceable

Friday, April 5, 13

Tem mais...

Friday, April 5, 13

Friday, April 5, 13

Activity 2 em 1?

Friday, April 5, 13

Vamos dividir em pedaços!

Friday, April 5, 13

Fragment

Friday, April 5, 13

IF’s INFINITOS!

==

Fragment

Friday, April 5, 13

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

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

STRATEGY

Friday, April 5, 13

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

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

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

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

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

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

Fragments:Strategy!

Friday, April 5, 13

E como ganhar $ facil?

Friday, April 5, 13

Venda a mesmaapp varias vezes...

Friday, April 5, 13

Friday, April 5, 13

AsyncTask

ExpandableListView

Adapter

LayoutInflater

LocationManager

MapActivity

Friday, April 5, 13

busao SP

Friday, April 5, 13

busao SP

busao AC

Friday, April 5, 13

busao SP

busao AC

busao UK

Friday, April 5, 13

Dar uma cara nova

Friday, April 5, 13

Plural de ônibus?

Friday, April 5, 13

Plural de ônibus?

ônibuses

Friday, April 5, 13

LÓGICA

Friday, April 5, 13

project librariesFriday, April 5, 13

Friday, April 5, 13

ApplicationResources

Friday, April 5, 13

values colors.xmlbackground_geral

Friday, April 5, 13

values colors.xmlbackground_geral

values colors.xmlbackground_geral

Friday, April 5, 13

Reaproveitamento:Project Libraries!

Flexibilidade:Application Resources!

Friday, April 5, 13

comportamentosdiferentes

Friday, April 5, 13

Friday, April 5, 13

Friday, April 5, 13

Fragment

ajuda nesse caso?!?

Friday, April 5, 13

Fragment

ajuda nesse caso?!?

Friday, April 5, 13

Mas e a Activity?

Friday, April 5, 13

Activity

Intent

Dalvik Dalvik

Só serve pra...

Friday, April 5, 13

startActivity(this, UmaActivity.class );

Na mesma App...

Friday, April 5, 13

startActivity(???.class )

Friday, April 5, 13

startActivity(“apelido” )

Friday, April 5, 13

AndroidManifest

Activity

“apelido”

Friday, April 5, 13

Friday, April 5, 13

startActivity(“apelido” )

Friday, April 5, 13

startActivity(“apelido” )

Friday, April 5, 13

startActivity(“apelido” )

Opis sou euzis!

Friday, April 5, 13

Intent Filters

Friday, April 5, 13

<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

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

Baixo acoplamentoe integração:Intent Filters!

Friday, April 5, 13

Friday, April 5, 13

OBRIGADO!

@erichegtgithub.com/erichegt

Friday, April 5, 13

Friday, April 5, 13

ORM...

Friday, April 5, 13

Friday, April 5, 13

Friday, April 5, 13