Diferença entre android.app.Fragment e android.support.v4.app.Fragment

175

Qual é a diferença entre android.app.Fragmente android.support.v4.app.Fragmente quais são as circunstâncias em que cada um deve ser usado?

raio
fonte

Respostas:

288

android.support.v4.app.Fragmenté a classe Fragment na biblioteca de suporte do Android, que é um pacote de compatibilidade que permite usar alguns dos recursos mais recentes do Android em versões mais antigas do Android.

android.app.Fragmenté a classe Fragment na versão nativa do Android SDK. Foi introduzido no Android 3 (API 11).

Se você deseja fazer com que seu aplicativo use fragmentos e deseja segmentar dispositivos antes da API 11, você deve usar android.support.v4.app.Fragment. No entanto, se você estiver segmentando apenas dispositivos com API 11 ou superior, poderá usar android.app.Fragment.

Editar: o conteúdo do sistema operacional android.app.Fragment agora está obsoleto (no nível 28 da API) e todos devem passar a usar as implementações da biblioteca de suporte.

Raghav Sood
fonte
4
Consulte também "Usando o FragmentStatePagerAdapter SEM biblioteca de suporte": stackoverflow.com/questions/18512294/…
CJBS
Se você substituir onAttach (), consulte este tópico para evitar que ele não seja chamado em algumas circunstâncias com android.app.Fragment: stackoverflow.com/questions/32083053/…
Hong
3
estará usando Androidx: androidx.fragment.app.Fragment
Abhijit Kurane
56

A partir de 2018:

Da android.app.Fragment documentação :

Esta classe foi descontinuada no nível 28 da API.
Use a Biblioteca de Suporte Fragmentpara obter um comportamento consistente em todos os dispositivos e acessar o Ciclo de Vida.

Portanto, fragmentos de suporte ( android.support.v4.app.Fragment) devem ser usados ​​em todos os lugares, em vez de fragmentos nativos ( android.app.Fragment) agora.

Artyom
fonte
@Artyom, como um noob para o desenvolvimento do Android, eu esperava que, quando a android.app.Fragmentclasse fosse preterida, o nível 28 da API tivesse uma abordagem de substituição alternativa, possivelmente radical. Existe uma abordagem avançada ou compatível com android.support.v4.app.Fragmenta anterior ?
Ergohack 11/09/18
1
@ergohack Veja o seguinte: para código java, você pode incluir o bytecode dentro do tempo de execução do dispositivo ou dentro do arquivo jar do aplicativo. O código da biblioteca de suporte será colocado no seu jar e fornecerá o mesmo recurso que o código fornecido em tempo de execução; portanto, não há razão para não usar a biblioteca de suporte moderna e mantida, em vez do código antigo e sem manutenção do telefone de destino.
Pierre
12

eu uso android.support.v4.app.Fragment exclusivamente.

Todos os aplicativos que escrevo precisam ser compatíveis com o Android 2.3 e essa é a maneira mais fácil de fazer isso.

Se você está apoiando 11+, continue com android.app.Fragment.

alex
fonte
18
Nesse caso, você está perdendo muitos recursos que existem na biblioteca de suporte, mas apenas no nativo após um determinado nível de API. getChildFragmentManager (), por exemplo, não está disponível até o nível 17. Meu conselho é usar apenas os fragmentos de suporte e fingir que o nativo não existe.
Johan
4

Se seu aplicativo estiver direcionado para a API 11 ou superior, você poderá usar android.app.Fragment e seu arquivo APK será menor.

Caso contrário, adicione a android.support.v4.app.Fragmentbiblioteca ao seu projeto para oferecer suporte a versões mais antigas da API do Android (Android 3.x).

Ahmad Payan
fonte
2

android.support.v4.app.Fragment é uma biblioteca que você pode usar para obter compatibilidade com versões anteriores da versão mais antiga da API.

Fragmentos foram adicionados no nível 11 da API (junto com outros recursos). Você deve incluir essa biblioteca para estender essas funções aos dispositivos anteriores à API 11. Essa é uma biblioteca útil e sugiro dar uma olhada no ActionBarSherlock, que estende a barra de ação aos dispositivos anteriores à API v11.

MonkeyDroid
fonte
-2

Se o seu aplicativo estiver direcionado para a API 11 ou acima do nível, você poderá usar android.app.Fragment e reduzirá o tamanho do APK. Caso contrário, use android.support.v4.app.Fragment

vinod wickramasekara
fonte