Fragments
Ricardo R. Lecheta
Com o aplicativo
BM&F Bovespa é
possível monitorar os
índices do mercado
financeiro através do
pregão em
andamento, consultar
em tempo real as
ações desejadas, e
acompanhar as
notícias e vídeos da
BM&F Bovespa. É
possível visualizar e
interagir com o
gráfico.
Através do aplicativo
Mobile Broker
Android é possível
consultar as ações
das bolsas de valores
e obter uma análise
do mercado através
de relatórios diários.
O Itaú Bankline para
tablet, permite acesso
a conta, localização
das agências e
caixas eletrônicos.
Disponível para os
clientes Itaú,
Personnalité e
Uniclass.
É possível acessar as
notícias do mercado,
acompanhar o gráfico
e monitorados
Índices, Ações,
Bolsas e Câmbio
através do aplicativo
UOL.
Agenda
Fragments
Porque fragments?
Fragments Android 3.x vs Compatibility Library
Migrando o código de uma activity para fragments
Utilizando fragments: XML vs API
Ciclo de vida dos fragments
Rotaçionando a tela
FragmentTransaction
Exemplos

               AndroidConf @2011 - Ricardo R. Lecheta
Fragments
Aproveitar melhor o espaço da tela nos grandes tablets




               AndroidConf @2011 - Ricardo R. Lecheta
Fragments
Como controlar diversas views com conteúdos diferentes?




              AndroidConf @2011 - Ricardo R. Lecheta
Como gerenciar todo esse conteúdo?

                         Fragments
   Aproveitar melhor o espaço da tela nos grandes tablets




                   AndroidConf @2011 - Ricardo R. Lecheta
Fragments
  Representa uma parte da interface da tela em particular.
  São mini-activities que executam dentro de uma activity principal, conhecida
com activity-host
  Possui um ciclo de vida bem definido – create/pause/resume/destroy
  Controla o seu estado e trata seus eventos, de forma independente de
outros fragments e activities
 Possui um design modular e pode ser reaproveitado




                      AndroidConf @2011 - Ricardo R. Lecheta
Fragments
Criado a partir do Android 3.0 – Honeycomb


android.app.Fragment
android.app.FragmentManager
android.app.FragmentTransaction




                  AndroidConf @2011 - Ricardo R. Lecheta
Fragments
Biblioteca de compatibilidade - Android 1.6 ou superior


android.support.v4.app.Fragment
android.support.v4.app.FragmentManager
android.support.v4.app.FragmentTransaction


andoid.support.v4.app.FragmentActivity (*)




                   AndroidConf @2011 - Ricardo R. Lecheta
Fragments
  Demo
  Criando um Fragment pelo XML

<fragment
    android:tag="tempoFrag"
    class="br.androidconf.lecheta.fragments.TempoFragment"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
/>

* android:id ou android:tag

TempoFragment frag = (TempoFragment)
   getFragmentManager().findFragmentByTag(“tempoFrag");

                     AndroidConf @2011 - Ricardo R. Lecheta
Fragments
Ciclo de Vida




                AndroidConf @2011 - Ricardo R. Lecheta
Fragments
Ciclo de Vida
Fragments
Demo
Fragments
Demo
Fragments
Benefícios


Deixa a activity mais simples
Separa responsabilidades
Permite um melhor encapsulamento e aproveitamento de código
FragmentTransaction
  Demo


  Criando um Fragment pela API


FragmentManager fm = getFragmentManager();
TempoFrag ment frag = new TempoFragment();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.layoutFrag, frag1, ”tempo”);
ft.commit();


  commit() * - Obrigatório


                     AndroidConf @2011 - Ricardo R. Lecheta
Fragments
Girar a tela


Fragments adicionados pelo XML
    Android vai manter o estado
Fragments adicionados via API
    Android também vai manter o estado da FragmentTransaction
    Cuidado para não adicionar o fragment duas vezes !
FragmentTransaction
      As transações são persistidas durante o ciclo de vida da activity
      Girar a tela - Demo


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

        if(savedInstanceState == null) {
             FragmentManager fm = getFragmentManager();
             Fragment1 frag1 = new Fragment1();
             FragmentTransaction ft = fm.beginTransaction();
             ft.add(R.id.layoutFrag, frag1, Fragment1.TAG);
             ft.commit();
        }
...
Fragments
  Passagem de Argumentos – Somente pela API
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

      if(savedInstanceState == null) {
           FragmentManager fm = getFragmentManager();
           Fragment1 frag1 = new Fragment1();
           Bundle args = new Bundle();
           args.putString("msg", "Android Conf 2011 - Fragment!");
           frag1.setArguments(args);
           FragmentTransaction ft = fm.beginTransaction();
           ft.add(R.id.layoutFrag, frag1, Fragment1.TAG);
           ft.commit();
      }
...
Fragments
      Passagem de Argumentos – Somente pela API


public View onCreateView(…) {
    View view = …
    TextView text1 = (TextView) view.findViewById(R.id.text1);
    if(getArguments() != null) {
         String msg = getArguments().getString("msg");
         text1.setText(msg);
    }
...
      O construtor de um Fragment precisa ser vazio!
Salvando estado - onSaveInstanceState
  Utiliza o método onSaveInstanceState(Bundle) da mesma forma que uma
Activity
• Demo
public void onSaveInstanceState(Bundle outState) {
     super.onSaveInstanceState(outState);
     outState.putSerializable("tempo", tempo);
}
public void onActivityCreated(Bundle savedInstanceState) {
     super.onActivityCreated(savedInstanceState);
     tempo = savedInstanceState == null ? null : (Tempo)
     savedInstanceState.getSerializable("tempo");
     if(tempo == null) {
           startTask(this);
     } else {
           updateView();
     }
}
Salvando estado - setRetainInstance
  O método Fragment.setRetainInstance(boolean) é utilizado para persistir a
instância do Fragment durante o ciclo de vida de uma Activity
• Demo
public View onCreateView(…) {
     View view = inflater.inflate(R.layout.tempo_fragment, null);
     setRetainInstance(true);
     return view;
}
public void onActivityCreated(Bundle savedInstanceState) {
     super.onActivityCreated(savedInstanceState);
     if(tempo == null) {
           startTask(this);
     } else {
           updateView();
     }
}
FragmentTransaction
  Demo - FragmentTransaction .add

FragmentManager fm = getFragmentManager();
FragmentDetalhes fragDetalhes = new FragmentDetalhes();

Bundle params = new Bundle();
params.putSerializable("tempo", tempo);
fragDetalhes.setArguments(params);

FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.layoutFragDetalhes, fragDetalhes, "fragDetalhes");
ft.commit();.
FragmentTransaction
  Demo - FragmentTransaction .add

FragmentManager fm = getFragmentManager();
FragmentDetalhes fragDetalhes = new FragmentDetalhes();

Bundle params = new Bundle();
params.putSerializable("tempo", tempo);
fragDetalhes.setArguments(params);

FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.layoutFragDetalhes, fragDetalhes, "fragDetalhes");
ft.commit();.
FragmentTransaction
  Demo - FragmentTransaction .replace

FragmentManager fm = getFragmentManager();
FragmentDetalhes fragDetalhes = new FragmentDetalhes();

Bundle params = new Bundle();
params.putSerializable("tempo", tempo);
fragDetalhes.setArguments(params);

FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.layoutFragDetalhes, fragDetalhes, "fragDetalhes");
ft.commit();.


* Para funcionar o replace() e remove() os fragments precisam ter sido
adicionados dinamicamente pela API
Fragment – back stack
  A “back stack” armazena a pilha de execuções de cada FragmentTransaction


  O botão voltar pode ser utilizado para desfazer uma operação efetuada
pela FragmentTransaction


  Demo
Fragment – back stack
A “back stack” armazena a pilha de execuções de cada FragmentTransaction


Qual será o comportamento do botão voltar?
Depende da interface de sua aplicação, e das necessidades do cliente
Livro Android
Livro Android
Livro Android
Livro Android
Obrigado
   Dúvidas ?




 Ricardo R. Lecheta

Androidconf 2011 lecheta

  • 1.
  • 2.
    Com o aplicativo BM&FBovespa é possível monitorar os índices do mercado financeiro através do pregão em andamento, consultar em tempo real as ações desejadas, e acompanhar as notícias e vídeos da BM&F Bovespa. É possível visualizar e interagir com o gráfico.
  • 3.
    Através do aplicativo MobileBroker Android é possível consultar as ações das bolsas de valores e obter uma análise do mercado através de relatórios diários. O Itaú Bankline para tablet, permite acesso a conta, localização das agências e caixas eletrônicos. Disponível para os clientes Itaú, Personnalité e Uniclass.
  • 4.
    É possível acessaras notícias do mercado, acompanhar o gráfico e monitorados Índices, Ações, Bolsas e Câmbio através do aplicativo UOL.
  • 5.
    Agenda Fragments Porque fragments? Fragments Android3.x vs Compatibility Library Migrando o código de uma activity para fragments Utilizando fragments: XML vs API Ciclo de vida dos fragments Rotaçionando a tela FragmentTransaction Exemplos AndroidConf @2011 - Ricardo R. Lecheta
  • 6.
    Fragments Aproveitar melhor oespaço da tela nos grandes tablets AndroidConf @2011 - Ricardo R. Lecheta
  • 7.
    Fragments Como controlar diversasviews com conteúdos diferentes? AndroidConf @2011 - Ricardo R. Lecheta
  • 8.
    Como gerenciar todoesse conteúdo? Fragments Aproveitar melhor o espaço da tela nos grandes tablets AndroidConf @2011 - Ricardo R. Lecheta
  • 9.
    Fragments Representauma parte da interface da tela em particular. São mini-activities que executam dentro de uma activity principal, conhecida com activity-host Possui um ciclo de vida bem definido – create/pause/resume/destroy Controla o seu estado e trata seus eventos, de forma independente de outros fragments e activities Possui um design modular e pode ser reaproveitado AndroidConf @2011 - Ricardo R. Lecheta
  • 10.
    Fragments Criado a partirdo Android 3.0 – Honeycomb android.app.Fragment android.app.FragmentManager android.app.FragmentTransaction AndroidConf @2011 - Ricardo R. Lecheta
  • 11.
    Fragments Biblioteca de compatibilidade- Android 1.6 ou superior android.support.v4.app.Fragment android.support.v4.app.FragmentManager android.support.v4.app.FragmentTransaction andoid.support.v4.app.FragmentActivity (*) AndroidConf @2011 - Ricardo R. Lecheta
  • 12.
    Fragments Demo Criando um Fragment pelo XML <fragment android:tag="tempoFrag" class="br.androidconf.lecheta.fragments.TempoFragment" android:layout_width="fill_parent" android:layout_height="wrap_content" /> * android:id ou android:tag TempoFragment frag = (TempoFragment) getFragmentManager().findFragmentByTag(“tempoFrag"); AndroidConf @2011 - Ricardo R. Lecheta
  • 13.
    Fragments Ciclo de Vida AndroidConf @2011 - Ricardo R. Lecheta
  • 14.
  • 15.
  • 16.
  • 17.
    Fragments Benefícios Deixa a activitymais simples Separa responsabilidades Permite um melhor encapsulamento e aproveitamento de código
  • 18.
    FragmentTransaction Demo Criando um Fragment pela API FragmentManager fm = getFragmentManager(); TempoFrag ment frag = new TempoFragment(); FragmentTransaction ft = fm.beginTransaction(); ft.add(R.id.layoutFrag, frag1, ”tempo”); ft.commit(); commit() * - Obrigatório AndroidConf @2011 - Ricardo R. Lecheta
  • 19.
    Fragments Girar a tela Fragmentsadicionados pelo XML Android vai manter o estado Fragments adicionados via API Android também vai manter o estado da FragmentTransaction Cuidado para não adicionar o fragment duas vezes !
  • 20.
    FragmentTransaction As transações são persistidas durante o ciclo de vida da activity Girar a tela - Demo @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); if(savedInstanceState == null) { FragmentManager fm = getFragmentManager(); Fragment1 frag1 = new Fragment1(); FragmentTransaction ft = fm.beginTransaction(); ft.add(R.id.layoutFrag, frag1, Fragment1.TAG); ft.commit(); } ...
  • 21.
    Fragments Passagemde Argumentos – Somente pela API @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); if(savedInstanceState == null) { FragmentManager fm = getFragmentManager(); Fragment1 frag1 = new Fragment1(); Bundle args = new Bundle(); args.putString("msg", "Android Conf 2011 - Fragment!"); frag1.setArguments(args); FragmentTransaction ft = fm.beginTransaction(); ft.add(R.id.layoutFrag, frag1, Fragment1.TAG); ft.commit(); } ...
  • 22.
    Fragments Passagem de Argumentos – Somente pela API public View onCreateView(…) { View view = … TextView text1 = (TextView) view.findViewById(R.id.text1); if(getArguments() != null) { String msg = getArguments().getString("msg"); text1.setText(msg); } ... O construtor de um Fragment precisa ser vazio!
  • 23.
    Salvando estado -onSaveInstanceState Utiliza o método onSaveInstanceState(Bundle) da mesma forma que uma Activity • Demo public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putSerializable("tempo", tempo); } public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); tempo = savedInstanceState == null ? null : (Tempo) savedInstanceState.getSerializable("tempo"); if(tempo == null) { startTask(this); } else { updateView(); } }
  • 24.
    Salvando estado -setRetainInstance O método Fragment.setRetainInstance(boolean) é utilizado para persistir a instância do Fragment durante o ciclo de vida de uma Activity • Demo public View onCreateView(…) { View view = inflater.inflate(R.layout.tempo_fragment, null); setRetainInstance(true); return view; } public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if(tempo == null) { startTask(this); } else { updateView(); } }
  • 25.
    FragmentTransaction Demo- FragmentTransaction .add FragmentManager fm = getFragmentManager(); FragmentDetalhes fragDetalhes = new FragmentDetalhes(); Bundle params = new Bundle(); params.putSerializable("tempo", tempo); fragDetalhes.setArguments(params); FragmentTransaction ft = fm.beginTransaction(); ft.add(R.id.layoutFragDetalhes, fragDetalhes, "fragDetalhes"); ft.commit();.
  • 26.
    FragmentTransaction Demo- FragmentTransaction .add FragmentManager fm = getFragmentManager(); FragmentDetalhes fragDetalhes = new FragmentDetalhes(); Bundle params = new Bundle(); params.putSerializable("tempo", tempo); fragDetalhes.setArguments(params); FragmentTransaction ft = fm.beginTransaction(); ft.add(R.id.layoutFragDetalhes, fragDetalhes, "fragDetalhes"); ft.commit();.
  • 27.
    FragmentTransaction Demo- FragmentTransaction .replace FragmentManager fm = getFragmentManager(); FragmentDetalhes fragDetalhes = new FragmentDetalhes(); Bundle params = new Bundle(); params.putSerializable("tempo", tempo); fragDetalhes.setArguments(params); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.layoutFragDetalhes, fragDetalhes, "fragDetalhes"); ft.commit();. * Para funcionar o replace() e remove() os fragments precisam ter sido adicionados dinamicamente pela API
  • 28.
    Fragment – backstack A “back stack” armazena a pilha de execuções de cada FragmentTransaction O botão voltar pode ser utilizado para desfazer uma operação efetuada pela FragmentTransaction Demo
  • 29.
    Fragment – backstack A “back stack” armazena a pilha de execuções de cada FragmentTransaction Qual será o comportamento do botão voltar? Depende da interface de sua aplicação, e das necessidades do cliente
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
    Obrigado Dúvidas ? Ricardo R. Lecheta