SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
Esquartejando sua Activity
                           com Fragments



@SuelenGC
www.suelengc.com.br
Quem sou eu...



                 Arquiteta de Software



                      @SuelenGC

                      www.suelengc.com.br

                      suelengcarvalho@gmail.com




                                                  2
3
Smartphone
                                Seleciona um item
                                do menu e inicia a
                                Activity B



     Item 1
     Item 2
     Item 3
     Item 4
     Item 5
     Item 6
     Item 7
     Item 8
     Item 9



   Activity A contendo o menu                  Activity B contendo o conteúdo   4
O mesmo código executando em um Tablet...


   Item 1

   Item 2
   Item 3

   Item 4
   Item 5

   Item 6
   Item 7

   Item 8
   Item 9



                  Activity A contendo o menu   5
Após seleciona um item inicia a Activity B




                    Activity B contendo o conteúdo   6
Tablets are not just big phones




                                  7
O que esperamos é um layout pensado para Tablets
                         Seleciona um item
                         e atualiza Fragment B



      Item 1

      Item 2
      Item 3

      Item 4
      Item 5

      Item 6
      Item 7

      Item 8
      Item 9



               Activity A contendo Fragment A e Fragment B   8
Quanto maior o espaço,
  + coisas vão colocar!
                     9
Putz, mas eu
não manjo de
fragments :-(




                10
O Fragment é muito mais do que apenas um
pedaço de tela.

Deve ser pensado como um COMPONENTE da
Activity MODULAR e REUTILIZÁVEL.




                                           11
App da BMF Bovespa para Smartphone




                                     12
App da BMF Bovespa para Tablet




                                 13
App da BMF Bovespa para Tablet
                   Gráfico do                             Código e pontos dos índices e
                   índice escolhido                       Código e valor das ações




Código e
Descrição
dos índices                                                                     Detalhes
                                                                                do índice
                                                                                escolhido




                                      Exibição do vídeo
        Notícias                                                        Lista de vídeos
                                      escolhido
                                                                                   14
Algumas características técnicas...

 SDK versão 3.0+ (Honeycomb)
 Uma classe que herda de android.app.Fragment
 Deve sempre estar contido em uma Activity
 Possui seu próprio lifecycle e este é diretamente afetado pelo
 lifecycle da Activity Host




                                                             15
Activity Lifecycle vs. Fragment Lifecycle




                                            16
Vamos pensar em uma tela mais simples...



     DevFest - Fragments




                                     Texto 2



                   Texto 1


                                     Texto 3




                                               17
Código da Activity sem fragments
                                                                      MainActivity.java
public class MainActivity extends Activity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.main_layout);
     }
     //Um monte de código que controla o comportamento da tela aqui
}


                                                                      main_layout.xml
<LinearLayout ... >
     <!-- Bloco 1 -->
     <LinearLayout ... >
           <TextView...
                android:text="Texto 1" />
     </LinearLayout>
     <LinearLayout... >
           <!-- Bloco 2 -->
           <LinearLayout ... >
                <TextView...
                      android:text="Texto 2" />
           </LinearLayout>
           <!-- Bloco 2 -->
           <LinearLayout ... >
                <TextView...
                      android:text="Texto 3" />
           </LinearLayout>
     </LinearLayout>
</LinearLayout>


                                                                                    18
Você acha isso
bonito????




            19
Código da Activity com fragments                            MainFragments.java
public class MainFragments extends Activity {
     @Override
     public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.main_fragments);
     }
}

                                                            main_fragments.xml
<LinearLayout ... >
     <!-- Bloco 1 -->
     <LinearLayout ... >
           <fragment...
                class="br.com.seu_pacote.Fragment1"
                android:id=“@+id/frag1" />
     </LinearLayout>
     <LinearLayout... >
           <!-- Bloco 2 -->
           <LinearLayout ... >
                <fragment...
                      class="br.com.seu_pacote.Fragment2"
                      android:id=“@+id/frag2" />
           </LinearLayout>
           <!-- Bloco 2 -->
           <LinearLayout ... >
                <fragment...
                      class="br.com.seu_pacote.Fragment3"
                      android:id=“@+id/frag3" />
           </LinearLayout>
     </LinearLayout>
</LinearLayout>

                                                                            20
Código do Fragment 1                                                          Fragment1.java
public class Fragment1 extends Fragment {
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
               Bundle savedInstanceState) {

          View view = inflater.inflate(R.layout.fragment1, null);
          TextView text = (TextView) view.findViewById(R.id.text1);
          text.setText("Fragment 1");
          return view;
     }
}

                                                                               fragment1.xml
<LinearLayout ... >
     <TextView...
           android:id=“@+id/text1"
           android:text="Fragment 1" />
</LinearLayout>




                                                                                          21
Código do Fragment 2                                                          Fragment2.java
public class Fragment2 extends Fragment {
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
               Bundle savedInstanceState) {

          View view = inflater.inflate(R.layout.fragment2, null);
          TextView text = (TextView) view.findViewById(R.id.text2);
          text.setText("Fragment 2");
          return view;
     }
}

                                                                               fragment2.xml
<LinearLayout ... >
     <TextView...
           android:id="@+id/text2"
           android:text="Fragment 2" />
</LinearLayout>




                                                                                          22
Código do Fragment 3                                                          Fragment3.java
public class Fragment3 extends Fragment {
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
               Bundle savedInstanceState) {

          View view = inflater.inflate(R.layout.fragment3, null);
          TextView text = (TextView) view.findViewById(R.id.text3);
          text.setText("Fragment 3");
          return view;
     }
}

                                                                               fragment3.xml
<LinearLayout ... >
     <TextView...
           android:id=“@+id/text3"
           android:text="Fragment 3" />
</LinearLayout>




                                                                                          23
Agora sim :)




               24
Ao executar novamente nosso código



     DevFest - Fragments




                                     Fragment 2



                 Fragment 1



                                     Fragment 3




                                                  25
Ok, mas como fazer essas
partes interagirem entre si?



                               26
Acessando um Fragment

   Da mesma forma que podemos encontrar uma
   view com o método findViewById(), podemos
   buscar um fragment utilizando os métodos
   findFragmentById() ou findFragmentByTag()
   através do método getFragmentManager()


Activity

           getFragmentManager().findFragmentById(“fragId”);   Fragment



Fragment
                                                                     27
Acessando um Fragment
                                                                                 MainFragments.java
public class MainFragments extends Activity {
     ...

     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
          MenuItem m1 = menu.add(0, 0, 0, "Alterar texto do Fragment 2");
          m1.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
          return super.onCreateOptionsMenu(menu);
     }

     @Override
     public boolean onMenuItemSelected(int featureId, MenuItem item) {
          FragmentManager fm = getFragmentManager();
          switch (item.getItemId()) {
          case 0:
                Fragment2 frag2 = (Fragment2) fm.findFragmentById(R.id.frag2);
                frag2.setTexto("Texto atualizado, graças a um click");
          }
          return true;
     }
}

                                                                                     Fragment2.java
public class Fragment2 extends Fragment {
     ...
     public void setTexto(String mensagem) {
           TextView text = (TextView) getView().findViewById(R.id.text2);
           text.setText(mensagem);
     }
}

                                                                                                28
Ao executar novamente nosso código



     DevFest - Fragments                          Alterar texto do fragment 2




                              Texto atualizado, graças a um click
                                          Fragment 2



                 Fragment 1



                                          Fragment 3




                                                                                29
Acessando a Activity Host

    O método getActivity() retorna a Activity Host
    corrente do Fragment.




             getActivity().setTitle(“Novo título para a Activity”);
Fragment                                                              Activity




                                                                             30
Acessando a Activity Host
                                                                            Fragment2.java
public class Fragment2 extends Fragment {
     ...
     public void setTexto(String mensagem) {
           TextView text = (TextView) getView().findViewById(R.id.text2);
           text.setText(mensagem);

          //Alterando o texto da Activity Host
          getActivity().setTitle("Mudando o texto a partir do Fragment");
     }
}




                                                                                       31
Ao executar novamente nosso código



     Mudando o texto a partir do Fragment                       Alterar texto do fragment 2




                                            Texto atualizado, graças a um click
                                                        Fragment 2



                 Fragment 1



                                                        Fragment 3




                                                                                              32
Transações com Fragments


  O método beginTransaction() possibilita
  adicionar, remover ou substituir um
  Fragment em runtime




                                            33
Substituindo um Fragment                                                        MainFragments.java
public class MainFragments extends Activity {
     ...
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
           ...
           MenuItem m2 = menu.add(0, 0, 0, "Substitui frag 1 p/ frag 3");
           m2.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
           return super.onCreateOptionsMenu(menu);
     }

     @Override
     public boolean onMenuItemSelected(int featureId, MenuItem item) {
          FragmentManager fm = getFragmentManager();
          switch (item.getItemId()) {
          ...
          case 1:
                FragmentTransaction transaction = getFragmentManager().beginTransaction();
                transaction.replace(R.id.frame1, new Fragment3());
                transaction.commit();
          }
          return true;
     }
}




                                                                                               34
Substituindo um Fragment
                                                            main_fragments.xml
<LinearLayout ... >
     <!-- Bloco 1 -->
     <FrameLayout ...
           android:id=“@+id/frame1" />

     <LinearLayout... >
           <!-- Bloco 2 -->
           <LinearLayout ... >
                <fragment...
                      class="br.com.seu_pacote.Fragment2"
                      android:id=“@+id/frag2" />
           </LinearLayout>
           <!-- Bloco 2 -->
           <LinearLayout ... >
                <fragment...
                      class="br.com.seu_pacote.Fragment3"
                      android:id=“@+id/frag3" />
           </LinearLayout>
     </LinearLayout>
</LinearLayout>




Trocar a tag fragment pela
tag FrameLayout
                                                                           35
Ao executar novamente nosso código



     DevFest - Fragments      Alterar texto do fragment 2    Substitui frag 1 p/ frag 3




                                                       Fragment 2



                          3
                 Fragment 1



                                                       Fragment 3




                                                                                          36
37
Sim :). Existe o Android Compatibility Package,
um jar que pode ser baixado pelo SDK Manager.38
Obrigada :)! Perguntas?




@SuelenGC
www.suelengc.com.br
                                                 39
https://github.com/SuelenGC
Referências
Livro Google Android para Tablets por Ricardo R. Lecheta
Novatec Editora. ISBN 9788575222928. 2012

Site oficial Developer Android – Fragments por Google
http://developer.android.com/guide/components/fragments.html

Site oficial Developer Android - Suportting Multiple Screens por Google
http://developer.android.com/guide/practices/screens_support.html

Site oficial Developer Android - Supporting Tablets and Handsets por Google
http://developer.android.com/guide/practices/tablets-and-handsets.html

Site oficial Developer Android - Activity`s Reference Library por Google
http://developer.android.com/reference/android/app/Activity.html

Blog Caelum – Layouts Mais Flexíveis com Android Fragments por Erich Egert
http://blog.caelum.com.br/layouts-mais-simples-com-android-fragments

C|Net - Nvidia CEO: Android tablets could outsell iPad in 3 years por Lance Whitney
http://reviews.cnet.com/8301-19736_7-20063893-251.html

Blog Toastdroid - Trabalhando com Fragments
http://toastdroid.wordpress.com/2012/08/03/trabalhando-com-fragments
(Na inclusão desta referência foi constatado que o blog foi deletado)                 40

Weitere ähnliche Inhalte

Was ist angesagt?

Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de ProjetoEduardo Mendes
 
Seminário sd android_exemplos
Seminário sd android_exemplosSeminário sd android_exemplos
Seminário sd android_exemplosCalvin Rodrigues
 
Indo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps AndroidIndo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps AndroidEduardo Carrara de Araujo
 
Introdução a programação em Android
Introdução a programação em AndroidIntrodução a programação em Android
Introdução a programação em AndroidPedro Veloso
 
better faster stronger dagger
better faster stronger daggerbetter faster stronger dagger
better faster stronger daggertdc-globalcode
 
Curso Android - 03 Conceitos Chaves
Curso Android - 03 Conceitos ChavesCurso Android - 03 Conceitos Chaves
Curso Android - 03 Conceitos ChavesRonildo Oliveira
 
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3Claudinei Brito Junior
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosDiego Santos
 
Como Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State APIComo Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State APIVinícius Thiengo
 
Android DevConference - Refactoring for RxJava
Android DevConference - Refactoring for RxJavaAndroid DevConference - Refactoring for RxJava
Android DevConference - Refactoring for RxJavaiMasters
 
Apresentação-Resumo sobre o Java Swing.
Apresentação-Resumo sobre o Java Swing.Apresentação-Resumo sobre o Java Swing.
Apresentação-Resumo sobre o Java Swing.Gabriel Jesus
 
Conhecendo o NuGet e utilizando com ASP.NET MVC
Conhecendo o NuGet e utilizando com ASP.NET MVCConhecendo o NuGet e utilizando com ASP.NET MVC
Conhecendo o NuGet e utilizando com ASP.NET MVCFabrício Lopes Sanchez
 

Was ist angesagt? (20)

Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de Projeto
 
Seminário sd android_exemplos
Seminário sd android_exemplosSeminário sd android_exemplos
Seminário sd android_exemplos
 
Indo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps AndroidIndo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps Android
 
Android: Intent, Broadcast Receiver e Notifications
Android: Intent, Broadcast Receiver e NotificationsAndroid: Intent, Broadcast Receiver e Notifications
Android: Intent, Broadcast Receiver e Notifications
 
Como criar Custom Tags
Como criar Custom TagsComo criar Custom Tags
Como criar Custom Tags
 
Introdução a programação em Android
Introdução a programação em AndroidIntrodução a programação em Android
Introdução a programação em Android
 
better faster stronger dagger
better faster stronger daggerbetter faster stronger dagger
better faster stronger dagger
 
Curso Android - 03 Conceitos Chaves
Curso Android - 03 Conceitos ChavesCurso Android - 03 Conceitos Chaves
Curso Android - 03 Conceitos Chaves
 
Android Aula 4
Android Aula 4Android Aula 4
Android Aula 4
 
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizados
 
Como Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State APIComo Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State API
 
Android DevConference - Refactoring for RxJava
Android DevConference - Refactoring for RxJavaAndroid DevConference - Refactoring for RxJava
Android DevConference - Refactoring for RxJava
 
JUnit
JUnitJUnit
JUnit
 
Apresentação-Resumo sobre o Java Swing.
Apresentação-Resumo sobre o Java Swing.Apresentação-Resumo sobre o Java Swing.
Apresentação-Resumo sobre o Java Swing.
 
Maven - Aula 04
Maven  - Aula 04Maven  - Aula 04
Maven - Aula 04
 
Applets
AppletsApplets
Applets
 
Maven - Aula 01
Maven - Aula 01Maven - Aula 01
Maven - Aula 01
 
Java swingcomponentes
Java swingcomponentesJava swingcomponentes
Java swingcomponentes
 
Conhecendo o NuGet e utilizando com ASP.NET MVC
Conhecendo o NuGet e utilizando com ASP.NET MVCConhecendo o NuGet e utilizando com ASP.NET MVC
Conhecendo o NuGet e utilizando com ASP.NET MVC
 

Ähnlich wie Esquartejando sua Activity com Fragments

Androidconf 2011 lecheta
Androidconf 2011 lechetaAndroidconf 2011 lecheta
Androidconf 2011 lechetarlecheta
 
Introdução ao Android (minicurso 4h)
Introdução ao Android (minicurso 4h)Introdução ao Android (minicurso 4h)
Introdução ao Android (minicurso 4h)Rodrigo Rocha
 
Minicurso Android Ronildo Oliveira
Minicurso Android  Ronildo OliveiraMinicurso Android  Ronildo Oliveira
Minicurso Android Ronildo OliveiraRonildo Oliveira
 
Computação Móvel 2012.2 - Android
Computação Móvel 2012.2 - AndroidComputação Móvel 2012.2 - Android
Computação Móvel 2012.2 - AndroidTiago Bencardino
 
Dê seus primeiros passos no desenvolvimento com Android
Dê seus primeiros passos no desenvolvimento com AndroidDê seus primeiros passos no desenvolvimento com Android
Dê seus primeiros passos no desenvolvimento com AndroidRodolfo Faquin Della Justina
 
Java - Gestão de componentes curso profissional
Java - Gestão de componentes curso profissionalJava - Gestão de componentes curso profissional
Java - Gestão de componentes curso profissionala41172
 
Conexao Java - Sua primeira app Android
Conexao Java - Sua primeira app AndroidConexao Java - Sua primeira app Android
Conexao Java - Sua primeira app AndroidSuelen Carvalho
 
Desenvolvimento de Aplicações para Dispositivos Móveis - Android Studio - Par...
Desenvolvimento de Aplicações para Dispositivos Móveis - Android Studio - Par...Desenvolvimento de Aplicações para Dispositivos Móveis - Android Studio - Par...
Desenvolvimento de Aplicações para Dispositivos Móveis - Android Studio - Par...Elmano Cavalcanti
 
Como criar interfaces gráficas com android
Como criar interfaces gráficas com androidComo criar interfaces gráficas com android
Como criar interfaces gráficas com androidRicardo Ogliari
 
Curso de Android Aula 4
Curso de Android Aula 4Curso de Android Aula 4
Curso de Android Aula 4Jose Berardo
 
Node.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasNode.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasRodrigo Branas
 
Desenvolvimento Moderno de Aplicativos Android
Desenvolvimento Moderno de Aplicativos AndroidDesenvolvimento Moderno de Aplicativos Android
Desenvolvimento Moderno de Aplicativos AndroidNelson Glauber Leal
 
Principais componentes para o desenvolvimento de aplicação android
Principais componentes para o desenvolvimento de aplicação androidPrincipais componentes para o desenvolvimento de aplicação android
Principais componentes para o desenvolvimento de aplicação androidcunhagronomia
 
Da introdução à prática no desenvolvimento Android
Da introdução à prática no desenvolvimento AndroidDa introdução à prática no desenvolvimento Android
Da introdução à prática no desenvolvimento AndroidRodolfo Faquin Della Justina
 

Ähnlich wie Esquartejando sua Activity com Fragments (20)

Androidconf 2011 lecheta
Androidconf 2011 lechetaAndroidconf 2011 lecheta
Androidconf 2011 lecheta
 
Introdução ao Android (minicurso 4h)
Introdução ao Android (minicurso 4h)Introdução ao Android (minicurso 4h)
Introdução ao Android (minicurso 4h)
 
Minicurso Android Ronildo Oliveira
Minicurso Android  Ronildo OliveiraMinicurso Android  Ronildo Oliveira
Minicurso Android Ronildo Oliveira
 
Computação Móvel 2012.2 - Android
Computação Móvel 2012.2 - AndroidComputação Móvel 2012.2 - Android
Computação Móvel 2012.2 - Android
 
Dê seus primeiros passos no desenvolvimento com Android
Dê seus primeiros passos no desenvolvimento com AndroidDê seus primeiros passos no desenvolvimento com Android
Dê seus primeiros passos no desenvolvimento com Android
 
Python Interface Gráfica Tkinter
Python Interface Gráfica TkinterPython Interface Gráfica Tkinter
Python Interface Gráfica Tkinter
 
Java - Gestão de componentes curso profissional
Java - Gestão de componentes curso profissionalJava - Gestão de componentes curso profissional
Java - Gestão de componentes curso profissional
 
Conexao Java - Sua primeira app Android
Conexao Java - Sua primeira app AndroidConexao Java - Sua primeira app Android
Conexao Java - Sua primeira app Android
 
Desenvolvimento de Aplicações para Dispositivos Móveis - Android Studio - Par...
Desenvolvimento de Aplicações para Dispositivos Móveis - Android Studio - Par...Desenvolvimento de Aplicações para Dispositivos Móveis - Android Studio - Par...
Desenvolvimento de Aplicações para Dispositivos Móveis - Android Studio - Par...
 
Android Aula 3
Android Aula 3Android Aula 3
Android Aula 3
 
Apache Struts
Apache StrutsApache Struts
Apache Struts
 
Como criar interfaces gráficas com android
Como criar interfaces gráficas com androidComo criar interfaces gráficas com android
Como criar interfaces gráficas com android
 
Curso de Android Aula 4
Curso de Android Aula 4Curso de Android Aula 4
Curso de Android Aula 4
 
Android
AndroidAndroid
Android
 
Node.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasNode.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo Branas
 
Android Para Iniciantes
Android Para IniciantesAndroid Para Iniciantes
Android Para Iniciantes
 
Desenvolvimento Moderno de Aplicativos Android
Desenvolvimento Moderno de Aplicativos AndroidDesenvolvimento Moderno de Aplicativos Android
Desenvolvimento Moderno de Aplicativos Android
 
GUI Aplicações Gráficas
GUI Aplicações Gráficas GUI Aplicações Gráficas
GUI Aplicações Gráficas
 
Principais componentes para o desenvolvimento de aplicação android
Principais componentes para o desenvolvimento de aplicação androidPrincipais componentes para o desenvolvimento de aplicação android
Principais componentes para o desenvolvimento de aplicação android
 
Da introdução à prática no desenvolvimento Android
Da introdução à prática no desenvolvimento AndroidDa introdução à prática no desenvolvimento Android
Da introdução à prática no desenvolvimento Android
 

Mehr von Suelen Carvalho

Porque Métodos Ágeis não é pra você!
Porque Métodos Ágeis não é pra você!Porque Métodos Ágeis não é pra você!
Porque Métodos Ágeis não é pra você!Suelen Carvalho
 
Scrum: Relembrando os por quês?
Scrum: Relembrando os por quês?Scrum: Relembrando os por quês?
Scrum: Relembrando os por quês?Suelen Carvalho
 
Techtrends xp desafios da agilidade com trabalho remoto
Techtrends xp   desafios da agilidade com trabalho remotoTechtrends xp   desafios da agilidade com trabalho remoto
Techtrends xp desafios da agilidade com trabalho remotoSuelen Carvalho
 
Introdução a Android Instant Apps
Introdução a Android Instant AppsIntrodução a Android Instant Apps
Introdução a Android Instant AppsSuelen Carvalho
 
Construindo Times de Alta Performance - Produtos & Engenharia
Construindo Times de Alta Performance - Produtos & EngenhariaConstruindo Times de Alta Performance - Produtos & Engenharia
Construindo Times de Alta Performance - Produtos & EngenhariaSuelen Carvalho
 
Git Merge e Rebase - The goal and differences
Git Merge e Rebase - The goal and differencesGit Merge e Rebase - The goal and differences
Git Merge e Rebase - The goal and differencesSuelen Carvalho
 
Dynamic Programming and Reinforcement Learning applied to Tetris Game
Dynamic Programming and Reinforcement Learning applied to Tetris GameDynamic Programming and Reinforcement Learning applied to Tetris Game
Dynamic Programming and Reinforcement Learning applied to Tetris GameSuelen Carvalho
 
Desenvolvimento de Novos Líderes - Paidéia Educação
Desenvolvimento de Novos Líderes - Paidéia EducaçãoDesenvolvimento de Novos Líderes - Paidéia Educação
Desenvolvimento de Novos Líderes - Paidéia EducaçãoSuelen Carvalho
 
O sucesso do seu app está nos detalhes!
O sucesso do seu app está nos detalhes!O sucesso do seu app está nos detalhes!
O sucesso do seu app está nos detalhes!Suelen Carvalho
 
Supporting Coding and Testing
Supporting Coding and TestingSupporting Coding and Testing
Supporting Coding and TestingSuelen Carvalho
 
Intercon Android 2014 - Google Play In App Billing
Intercon Android 2014 - Google Play In App BillingIntercon Android 2014 - Google Play In App Billing
Intercon Android 2014 - Google Play In App BillingSuelen Carvalho
 
Semana da Computação USP São Carlos 2014 - Carreira Mobile
Semana da Computação USP São Carlos 2014 - Carreira MobileSemana da Computação USP São Carlos 2014 - Carreira Mobile
Semana da Computação USP São Carlos 2014 - Carreira MobileSuelen Carvalho
 
TDC 2014 - Tudo sobre GCM Push Notifications
TDC 2014 - Tudo sobre GCM Push NotificationsTDC 2014 - Tudo sobre GCM Push Notifications
TDC 2014 - Tudo sobre GCM Push NotificationsSuelen Carvalho
 
Mobile Conf 2014 - Sua carreira e o que o desenvolvimento mobile tem a ver co...
Mobile Conf 2014 - Sua carreira e o que o desenvolvimento mobile tem a ver co...Mobile Conf 2014 - Sua carreira e o que o desenvolvimento mobile tem a ver co...
Mobile Conf 2014 - Sua carreira e o que o desenvolvimento mobile tem a ver co...Suelen Carvalho
 
A história do surgimento da plataforma móvel Android.
A história do surgimento da plataforma móvel Android.A história do surgimento da plataforma móvel Android.
A história do surgimento da plataforma móvel Android.Suelen Carvalho
 
O fantástico mundo de Android
O fantástico mundo de AndroidO fantástico mundo de Android
O fantástico mundo de AndroidSuelen Carvalho
 

Mehr von Suelen Carvalho (20)

Porque Métodos Ágeis não é pra você!
Porque Métodos Ágeis não é pra você!Porque Métodos Ágeis não é pra você!
Porque Métodos Ágeis não é pra você!
 
Scrum: Relembrando os por quês?
Scrum: Relembrando os por quês?Scrum: Relembrando os por quês?
Scrum: Relembrando os por quês?
 
Techtrends xp desafios da agilidade com trabalho remoto
Techtrends xp   desafios da agilidade com trabalho remotoTechtrends xp   desafios da agilidade com trabalho remoto
Techtrends xp desafios da agilidade com trabalho remoto
 
Introdução a Kotlin
Introdução a KotlinIntrodução a Kotlin
Introdução a Kotlin
 
Introdução a Android Instant Apps
Introdução a Android Instant AppsIntrodução a Android Instant Apps
Introdução a Android Instant Apps
 
Google IO'17
Google IO'17Google IO'17
Google IO'17
 
Construindo Times de Alta Performance - Produtos & Engenharia
Construindo Times de Alta Performance - Produtos & EngenhariaConstruindo Times de Alta Performance - Produtos & Engenharia
Construindo Times de Alta Performance - Produtos & Engenharia
 
Git Merge e Rebase - The goal and differences
Git Merge e Rebase - The goal and differencesGit Merge e Rebase - The goal and differences
Git Merge e Rebase - The goal and differences
 
Dynamic Programming and Reinforcement Learning applied to Tetris Game
Dynamic Programming and Reinforcement Learning applied to Tetris GameDynamic Programming and Reinforcement Learning applied to Tetris Game
Dynamic Programming and Reinforcement Learning applied to Tetris Game
 
Desenvolvimento de Novos Líderes - Paidéia Educação
Desenvolvimento de Novos Líderes - Paidéia EducaçãoDesenvolvimento de Novos Líderes - Paidéia Educação
Desenvolvimento de Novos Líderes - Paidéia Educação
 
O sucesso do seu app está nos detalhes!
O sucesso do seu app está nos detalhes!O sucesso do seu app está nos detalhes!
O sucesso do seu app está nos detalhes!
 
Go lang
Go langGo lang
Go lang
 
Supporting Coding and Testing
Supporting Coding and TestingSupporting Coding and Testing
Supporting Coding and Testing
 
Intercon Android 2014 - Google Play In App Billing
Intercon Android 2014 - Google Play In App BillingIntercon Android 2014 - Google Play In App Billing
Intercon Android 2014 - Google Play In App Billing
 
Semana da Computação USP São Carlos 2014 - Carreira Mobile
Semana da Computação USP São Carlos 2014 - Carreira MobileSemana da Computação USP São Carlos 2014 - Carreira Mobile
Semana da Computação USP São Carlos 2014 - Carreira Mobile
 
TDC 2014 - Tudo sobre GCM Push Notifications
TDC 2014 - Tudo sobre GCM Push NotificationsTDC 2014 - Tudo sobre GCM Push Notifications
TDC 2014 - Tudo sobre GCM Push Notifications
 
Mobile Conf 2014 - Sua carreira e o que o desenvolvimento mobile tem a ver co...
Mobile Conf 2014 - Sua carreira e o que o desenvolvimento mobile tem a ver co...Mobile Conf 2014 - Sua carreira e o que o desenvolvimento mobile tem a ver co...
Mobile Conf 2014 - Sua carreira e o que o desenvolvimento mobile tem a ver co...
 
7 Masters sobre Android
7 Masters sobre Android7 Masters sobre Android
7 Masters sobre Android
 
A história do surgimento da plataforma móvel Android.
A história do surgimento da plataforma móvel Android.A história do surgimento da plataforma móvel Android.
A história do surgimento da plataforma móvel Android.
 
O fantástico mundo de Android
O fantástico mundo de AndroidO fantástico mundo de Android
O fantástico mundo de Android
 

Esquartejando sua Activity com Fragments

  • 1. Esquartejando sua Activity com Fragments @SuelenGC www.suelengc.com.br
  • 2. Quem sou eu... Arquiteta de Software @SuelenGC www.suelengc.com.br suelengcarvalho@gmail.com 2
  • 3. 3
  • 4. Smartphone Seleciona um item do menu e inicia a Activity B Item 1 Item 2 Item 3 Item 4 Item 5 Item 6 Item 7 Item 8 Item 9 Activity A contendo o menu Activity B contendo o conteúdo 4
  • 5. O mesmo código executando em um Tablet... Item 1 Item 2 Item 3 Item 4 Item 5 Item 6 Item 7 Item 8 Item 9 Activity A contendo o menu 5
  • 6. Após seleciona um item inicia a Activity B Activity B contendo o conteúdo 6
  • 7. Tablets are not just big phones 7
  • 8. O que esperamos é um layout pensado para Tablets Seleciona um item e atualiza Fragment B Item 1 Item 2 Item 3 Item 4 Item 5 Item 6 Item 7 Item 8 Item 9 Activity A contendo Fragment A e Fragment B 8
  • 9. Quanto maior o espaço, + coisas vão colocar! 9
  • 10. Putz, mas eu não manjo de fragments :-( 10
  • 11. O Fragment é muito mais do que apenas um pedaço de tela. Deve ser pensado como um COMPONENTE da Activity MODULAR e REUTILIZÁVEL. 11
  • 12. App da BMF Bovespa para Smartphone 12
  • 13. App da BMF Bovespa para Tablet 13
  • 14. App da BMF Bovespa para Tablet Gráfico do Código e pontos dos índices e índice escolhido Código e valor das ações Código e Descrição dos índices Detalhes do índice escolhido Exibição do vídeo Notícias Lista de vídeos escolhido 14
  • 15. Algumas características técnicas... SDK versão 3.0+ (Honeycomb) Uma classe que herda de android.app.Fragment Deve sempre estar contido em uma Activity Possui seu próprio lifecycle e este é diretamente afetado pelo lifecycle da Activity Host 15
  • 16. Activity Lifecycle vs. Fragment Lifecycle 16
  • 17. Vamos pensar em uma tela mais simples... DevFest - Fragments Texto 2 Texto 1 Texto 3 17
  • 18. Código da Activity sem fragments MainActivity.java public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); } //Um monte de código que controla o comportamento da tela aqui } main_layout.xml <LinearLayout ... > <!-- Bloco 1 --> <LinearLayout ... > <TextView... android:text="Texto 1" /> </LinearLayout> <LinearLayout... > <!-- Bloco 2 --> <LinearLayout ... > <TextView... android:text="Texto 2" /> </LinearLayout> <!-- Bloco 2 --> <LinearLayout ... > <TextView... android:text="Texto 3" /> </LinearLayout> </LinearLayout> </LinearLayout> 18
  • 20. Código da Activity com fragments MainFragments.java public class MainFragments extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_fragments); } } main_fragments.xml <LinearLayout ... > <!-- Bloco 1 --> <LinearLayout ... > <fragment... class="br.com.seu_pacote.Fragment1" android:id=“@+id/frag1" /> </LinearLayout> <LinearLayout... > <!-- Bloco 2 --> <LinearLayout ... > <fragment... class="br.com.seu_pacote.Fragment2" android:id=“@+id/frag2" /> </LinearLayout> <!-- Bloco 2 --> <LinearLayout ... > <fragment... class="br.com.seu_pacote.Fragment3" android:id=“@+id/frag3" /> </LinearLayout> </LinearLayout> </LinearLayout> 20
  • 21. Código do Fragment 1 Fragment1.java public class Fragment1 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment1, null); TextView text = (TextView) view.findViewById(R.id.text1); text.setText("Fragment 1"); return view; } } fragment1.xml <LinearLayout ... > <TextView... android:id=“@+id/text1" android:text="Fragment 1" /> </LinearLayout> 21
  • 22. Código do Fragment 2 Fragment2.java public class Fragment2 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment2, null); TextView text = (TextView) view.findViewById(R.id.text2); text.setText("Fragment 2"); return view; } } fragment2.xml <LinearLayout ... > <TextView... android:id="@+id/text2" android:text="Fragment 2" /> </LinearLayout> 22
  • 23. Código do Fragment 3 Fragment3.java public class Fragment3 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment3, null); TextView text = (TextView) view.findViewById(R.id.text3); text.setText("Fragment 3"); return view; } } fragment3.xml <LinearLayout ... > <TextView... android:id=“@+id/text3" android:text="Fragment 3" /> </LinearLayout> 23
  • 25. Ao executar novamente nosso código DevFest - Fragments Fragment 2 Fragment 1 Fragment 3 25
  • 26. Ok, mas como fazer essas partes interagirem entre si? 26
  • 27. Acessando um Fragment Da mesma forma que podemos encontrar uma view com o método findViewById(), podemos buscar um fragment utilizando os métodos findFragmentById() ou findFragmentByTag() através do método getFragmentManager() Activity getFragmentManager().findFragmentById(“fragId”); Fragment Fragment 27
  • 28. Acessando um Fragment MainFragments.java public class MainFragments extends Activity { ... @Override public boolean onCreateOptionsMenu(Menu menu) { MenuItem m1 = menu.add(0, 0, 0, "Alterar texto do Fragment 2"); m1.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); return super.onCreateOptionsMenu(menu); } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { FragmentManager fm = getFragmentManager(); switch (item.getItemId()) { case 0: Fragment2 frag2 = (Fragment2) fm.findFragmentById(R.id.frag2); frag2.setTexto("Texto atualizado, graças a um click"); } return true; } } Fragment2.java public class Fragment2 extends Fragment { ... public void setTexto(String mensagem) { TextView text = (TextView) getView().findViewById(R.id.text2); text.setText(mensagem); } } 28
  • 29. Ao executar novamente nosso código DevFest - Fragments Alterar texto do fragment 2 Texto atualizado, graças a um click Fragment 2 Fragment 1 Fragment 3 29
  • 30. Acessando a Activity Host O método getActivity() retorna a Activity Host corrente do Fragment. getActivity().setTitle(“Novo título para a Activity”); Fragment Activity 30
  • 31. Acessando a Activity Host Fragment2.java public class Fragment2 extends Fragment { ... public void setTexto(String mensagem) { TextView text = (TextView) getView().findViewById(R.id.text2); text.setText(mensagem); //Alterando o texto da Activity Host getActivity().setTitle("Mudando o texto a partir do Fragment"); } } 31
  • 32. Ao executar novamente nosso código Mudando o texto a partir do Fragment Alterar texto do fragment 2 Texto atualizado, graças a um click Fragment 2 Fragment 1 Fragment 3 32
  • 33. Transações com Fragments O método beginTransaction() possibilita adicionar, remover ou substituir um Fragment em runtime 33
  • 34. Substituindo um Fragment MainFragments.java public class MainFragments extends Activity { ... @Override public boolean onCreateOptionsMenu(Menu menu) { ... MenuItem m2 = menu.add(0, 0, 0, "Substitui frag 1 p/ frag 3"); m2.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); return super.onCreateOptionsMenu(menu); } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { FragmentManager fm = getFragmentManager(); switch (item.getItemId()) { ... case 1: FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.replace(R.id.frame1, new Fragment3()); transaction.commit(); } return true; } } 34
  • 35. Substituindo um Fragment main_fragments.xml <LinearLayout ... > <!-- Bloco 1 --> <FrameLayout ... android:id=“@+id/frame1" /> <LinearLayout... > <!-- Bloco 2 --> <LinearLayout ... > <fragment... class="br.com.seu_pacote.Fragment2" android:id=“@+id/frag2" /> </LinearLayout> <!-- Bloco 2 --> <LinearLayout ... > <fragment... class="br.com.seu_pacote.Fragment3" android:id=“@+id/frag3" /> </LinearLayout> </LinearLayout> </LinearLayout> Trocar a tag fragment pela tag FrameLayout 35
  • 36. Ao executar novamente nosso código DevFest - Fragments Alterar texto do fragment 2 Substitui frag 1 p/ frag 3 Fragment 2 3 Fragment 1 Fragment 3 36
  • 37. 37
  • 38. Sim :). Existe o Android Compatibility Package, um jar que pode ser baixado pelo SDK Manager.38
  • 40. Referências Livro Google Android para Tablets por Ricardo R. Lecheta Novatec Editora. ISBN 9788575222928. 2012 Site oficial Developer Android – Fragments por Google http://developer.android.com/guide/components/fragments.html Site oficial Developer Android - Suportting Multiple Screens por Google http://developer.android.com/guide/practices/screens_support.html Site oficial Developer Android - Supporting Tablets and Handsets por Google http://developer.android.com/guide/practices/tablets-and-handsets.html Site oficial Developer Android - Activity`s Reference Library por Google http://developer.android.com/reference/android/app/Activity.html Blog Caelum – Layouts Mais Flexíveis com Android Fragments por Erich Egert http://blog.caelum.com.br/layouts-mais-simples-com-android-fragments C|Net - Nvidia CEO: Android tablets could outsell iPad in 3 years por Lance Whitney http://reviews.cnet.com/8301-19736_7-20063893-251.html Blog Toastdroid - Trabalhando com Fragments http://toastdroid.wordpress.com/2012/08/03/trabalhando-com-fragments (Na inclusão desta referência foi constatado que o blog foi deletado) 40