Qual é a diferença entre Fragment e FragmentActivity?

Respostas:

280

A Fragmenté uma seção de um Activityque possui:

  • seu próprio ciclo de vida
  • recebe seus próprios eventos de entrada
  • pode ser adicionado ou removido enquanto o sistema Activityestiver em execução.

A Fragmentdeve sempre estar incorporado em um Activity.

Fragmentsnão fazem parte da API anterior ao HoneyComb (3.0). Se você deseja usar Fragmentsem um aplicativo direcionado a uma versão da plataforma anterior ao HoneyComb, precisará adicionar o Pacote de Suporte ao seu projeto e usá-lo FragmentActivitypara manter seu Fragments. A FragmentActivityclasse possui uma API para lidar Fragments, enquanto a Activityclasse anterior ao HoneyComb não.

Se o seu projeto está direcionado apenas ao HoneyComb ou mais recente, você deve usar Activitye não FragmentActivitymanter o seu Fragments.

Alguns detalhes:

Use android.app.Fragmentcom Activity. Use android.support.v4.app.Fragmentcom FragmentActivity. Não adicione o pacote de suporte Fragmenta um, Activitypois isso causará uma exceção.

Uma coisa a ter cuidado: FragmentManagere LoaderManagerter versões de suporte separadas para FragmentActivity:

Se você estiver usando a Fragmentem um Activity(HoneyComb e superior), chame

  • getFragmentManager() para obter android.app.FragmentManager
  • getLoaderManager() para obter android.app.LoaderManager

se você estiver usando a Fragmentem um FragmentActivity(pré-HoneyComb), ligue para:

  • getSupportFragmentManager()para conseguir android.support.v4.app.FragmentManager.
  • getSupportLoaderManager() para obter android.support.v4.app.LoaderManager

então não faça

//don't do this
myFragmentActivity.getLoaderManager(); 
//instead do this:
myFragmentActivity.getSupportLoaderManager();

ou

//don't do this:
android.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager();
//instead do this:
android.support.v4.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager()

Também é útil saber que, embora um fragmento Activityprecise ser incorporado a um objeto, ele não precisa fazer parte do Activitylayout. Ele pode ser usado como um trabalhador invisível para a atividade, sem nenhuma interface de usuário própria.

Gunnar Karlsson
fonte
6
No entanto, não é necessário que um fragmento faça parte do layout da atividade; você também pode usar um fragmento sem sua própria interface do usuário como um trabalhador invisível para a atividade.
Uzay95 12/12/2013
1
@ uzay95 obrigado por apontar isso. Eu adicionei uma seção no final para mencionar.
Gunnar Karlsson
@GunnarKarlsson Vamos adicionar um fragmento a fragmentActivity?
Dhasneem
2
@ Dhasneem Você adiciona um fragmento a uma FragmentActivity se quiser que seu aplicativo funcione em versões do Android inferiores a 3.0. Caso contrário, você adiciona um fragmento a uma atividade.
Gunnar Karlsson
2
Obrigado! Isso resolve meu problema! Agora eu sei por que meu aplicativo (escrito com Activity) sempre trava no onCreate após adicionar o botão de login do Facebook (eles usam android.support.v4.app.Fragment no exemplo). Claro que também há outra razão para o acidente. Mas sua resposta é a peça final para reuni-las.
Chlind
14

FragmentActivity é a nossa atividade clássica com suporte a fragmentos, nada mais. Portanto, FragmentActivity é necessário, quando um Fragmento será anexado à Activity.

O Fragmento de Poço é um bom componente que copia os comportamentos básicos da Activity, ainda não um componente de aplicativo independente como Activity e precisa ser anexado à Activity para funcionar.

Veja aqui mais detalhes

Gökhan Barış Aker
fonte
1
BTW, resposta desatualizada, que se aplica apenas a aplicativos que desejam trabalhar em dispositivos anteriores à API 11. #
ToolmakerSteve
@ToolmakerSteve você pode fornecer mais detalhes? Se possível, você pode editar a resposta com a versão atualizada?
Gökhan Barış Aker
8

Pense em FragmentActivity como uma classe Activity regular que pode oferecer suporte a Fragments. Antes do favo de mel, uma classe de atividade não podia suprimir fragmentos diretamente, portanto, isso é necessário em atividades que usam fragmentos.

Se sua distribuição de destino for Honeycomb e além, você poderá estender a atividade.

Também um fragmento deve ser considerado como uma 'subatividade'. Não pode existir sem uma atividade. Sempre pense em um fragmento como uma sub atividade e você deve ser bom. Portanto, a atividade seria o pai e o (s) fragmento (s), o tipo de relacionamento simbólico da criança.

j2emanue
fonte
1

uma FragmentActivity é uma atividade ad-hoc que contém Fragment. Nestas poucas palavras, explico uma das principais mudanças importantes que, com o Android 3.0 (HoneyComb), a equipe do Android inseriu no android sdk.

Com esse novo tipo de conceito, suas partes de código e layout se tornam mais flexíveis e sustentáveis. Se você pesquisar no google, existem muitos exemplos.

Simone Casagranda
fonte