Minha pergunta está separada das óbvias diferenças de herança, quais são as principais diferenças entre Fragment
e FragmentActivity
? Para quais cenários cada classe é mais adequada? Estou tentando entender por que essas duas classes existem ...
Minha pergunta está separada das óbvias diferenças de herança, quais são as principais diferenças entre Fragment
e FragmentActivity
? Para quais cenários cada classe é mais adequada? Estou tentando entender por que essas duas classes existem ...
Respostas:
A Fragment
é uma seção de um Activity
que possui:
Activity
estiver em execução.A Fragment
deve sempre estar incorporado em um Activity
.
Fragments
não fazem parte da API anterior ao HoneyComb (3.0). Se você deseja usar Fragments
em um aplicativo direcionado a uma versão da plataforma anterior ao HoneyComb, precisará adicionar o Pacote de Suporte ao seu projeto e usá-lo FragmentActivity
para manter seu Fragments
. A FragmentActivity
classe possui uma API para lidar Fragments
, enquanto a Activity
classe anterior ao HoneyComb não.
Se o seu projeto está direcionado apenas ao HoneyComb ou mais recente, você deve usar Activity
e não FragmentActivity
manter o seu Fragments
.
Alguns detalhes:
Use android.app.Fragment
com Activity
. Use android.support.v4.app.Fragment
com FragmentActivity
. Não adicione o pacote de suporte Fragment
a um, Activity
pois isso causará uma exceção.
Uma coisa a ter cuidado: FragmentManager
e LoaderManager
ter versões de suporte separadas para FragmentActivity:
Se você estiver usando a Fragment
em um Activity
(HoneyComb e superior), chame
getFragmentManager()
para obter android.app.FragmentManager
getLoaderManager()
para obter android.app.LoaderManager
se você estiver usando a Fragment
em 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 Activity
precise ser incorporado a um objeto, ele não precisa fazer parte do Activity
layout. Ele pode ser usado como um trabalhador invisível para a atividade, sem nenhuma interface de usuário própria.
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
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.
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.