Fragmento ou Fragmento de Suporte?


125

Estou desenvolvendo um aplicativo que suporta Android> = 4.0. Ele usa fragmentos da android.appembalagem. Como estou enfrentando problemas com a implementação de fragmentos mais antiga na 4.0, como esta , que já foram corrigidos na biblioteca de suporte, estou pensando em voltar à implementação de fragmentos da biblioteca de suporte para obter uma implementação mais confiável e consistente.

Qual a sua opinião sobre isso? Você está usando fragmentos da biblioteca de suporte, mesmo que já estejam disponíveis, ao desenvolver para o Android 4?


2
Essa é uma boa pergunta (+1 porque me deixa curiosa). Também não há uma boa explicação na web para isso. Estou usando a biblioteca de suporte do meu aplicativo e me pergunto se estou errado ou não, porque não notei nenhum erro durante a compilação ou durante o teste.
— JJ86

2
@animuson A resposta de brillenheini prova que essa não é uma resposta primariamente baseada em opiniões.
— OneWorld 16/01

Respostas:


90

Pela minha experiência, usar a mesma implementação de fragmento em todos os dispositivos Android é uma grande vantagem. Não consegui me livrar de todas as NullPointerExceptions quando o estado é salvo no Android 4.0 usando fragmentos nativos, com a biblioteca de suporte em que desapareceram. Também não pude ver nenhuma desvantagem até agora com essa abordagem.

Portanto, minha resposta para minha própria pergunta é agora: ao desenvolver para o Android 4.x, usar os fragmentos da biblioteca de suporte é uma boa idéia. A biblioteca de suporte possui bugs corrigidos que ainda estão presentes nas implementações de fragmentos mais antigos e é frequentemente atualizado com mais correções.


11
Então, qual é o propósito do android.app.Fragmententão? Se você puder adicionar isso à sua resposta aqui com um pouco mais de explicação, eu ficaria totalmente satisfeito. Obrigado!
— jonstaff

1
@ jonstaff O motivo é provavelmente histórico. Por favor, veja minha resposta atualizada lá.
— Brillenheini

11
Por uma questão de integridade, parece haver coisas que os fragmentos de suporte não podem fazer (por exemplo, serem animadosobjectAnimator , mesmo que o SO de destino real o suporte). O que, no caso de você estar usando ViewPager, significa que você precisa usar adaptadores da biblioteca de suporte da v13, caso contrário, não poderá ter o viewpager e a animação invertida.
— GSerg

5
Além disso, tenha cuidado, desde agosto de 2014, a biblioteca v13 não pode fazer fragmentos aninhados.
— Martin Marconcini

1
Por que os caras do google optaram por usar a biblioteca v13 do aplicativo iosched github.com/google/iosched/blob/master/android/src/main/java/com/… , eles devem ter algum motivo
— forcewill

40

Um grande motivo para permanecer SupportFragmentpor um tempo é que você não tem acesso ChildFragmentManageraté a API 17. A biblioteca de suporte fornecerá uma versão de suporte do gerenciador de fragmentos filho.

Isso se torna um grande problema se você tiver fragmentos que contenham outros fragmentos. Isso é comum em aplicativos de tablet com muita complexidade e / ou sua arquitetura geral se baseia em um layout com guias ou usa a gaveta de navegação.


21

Eu também estava ficando frustrado por ter que incluir as bibliotecas de suporte, apesar de ter como alvo o Android 4.0 ou superior - mas parece que é oficialmente recomendado:

O pacote Android Support Library contém várias bibliotecas que podem ser incluídas no seu aplicativo. Cada uma dessas bibliotecas suporta um intervalo específico de versões da plataforma Android e um conjunto de recursos.

Este guia explica os recursos importantes e o suporte à versão fornecido pelas Bibliotecas de suporte para ajudá-lo a decidir quais delas você deve incluir em seu aplicativo. Em geral, recomendamos a inclusão das bibliotecas de suporte v4 e v7 appcompat, pois elas oferecem suporte a uma ampla variedade de versões do Android e fornecem APIs para os padrões de interface do usuário recomendados.

http://developer.android.com/tools/support-library/features.html


Essa deve ser a resposta aceita, apesar de o @brillenheini ter fornecido uma resposta por conta própria. Responde à pergunta com a melhor precisão e concisão.
— Arvindh Mani

4

IMHO, se você planeja desenvolver apenas para 4.0, eu recomendaria ir com as bibliotecas nativas, pois o executável ficará menor. É verdade que você pode ter problemas de bugs nas versões anteriores, mas acho que a maioria delas deve ser bastante trivial para contornar. Além disso, a biblioteca de compatibilidade deve mapear para os fragmentos nativos, caso você esteja executando o 4.0 e superior. Portanto, você pode acabar tendo que enfrentar esse tipo de problema de qualquer maneira. O problema com as bibliotecas de suporte é que muitas classes aparecem 2x (uma vez na estrutura do pacote de suporte e outra na estrutura do pacote "nativo"), o que torna o desenvolvimento um pouco mais complicado.

No entanto, se você também deseja lançar seu aplicativo antes da 4.0, não há como contornar a biblioteca de suporte. Além disso, como existem cerca de 38% de todos os usuários no 2.3, pode fazer sentido para os negócios incluir essa versão do sistema operacional. Nesse caso, você pode usar a biblioteca de suporte em conjunto com o Jake Wartons ActionBarSherlock (ou com o Google suporta a biblioteca ActionBar depois que ela for lançada).


3
Obrigado pela sua resposta. Como preciso do ViewPager, tenho que incluir a biblioteca de suporte de qualquer maneira. Além disso, o fragmento de suporte não tenta alternar para a implementação nativa, se disponível. É o que dizem os médicos .
— Brillenheini 26/06

Sim, a coisa é (como a @brillenheini disse) que, para ter o ViewPager, você precisa da v4, portanto, mesmo se você estiver segmentando apenas dispositivos v13 +, provavelmente terminará a v4.
— Sotti 19/05

Acabei de descobrir isso também (o ViewPager precisa da v4) na minha API 21 e no aplicativo. Meh: - /
— mraviator

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.