Eu sou do iOS, onde é fácil e você simplesmente usa um UIViewController. No entanto, no Android, as coisas parecem muito mais complicadas, com determinados UIComponents para níveis de API específicos. Estou lendo o BigNerdRanch para Android (o livro tem aproximadamente 2 anos) e eles sugerem que eu useActivity
para hospedar o meu FragmentActivities
. No entanto, pensei que Activity
estava obsoleto.
Portanto, para o nível 22 da API (com um suporte mínimo para o nível 15 ou 16), o que exatamente devo usar para hospedar os componentes e os próprios componentes? Existem usos para todos esses itens ou devo usar um ou dois quase exclusivamente?
android
android-fragments
android-activity
android-actionbaractivity
appcompatactivity
Jameson
fonte
fonte
FragmentActivity
s. Você hospeda apenasFragment
s. Nas versões mais recentes do Android, aActivity
própria classe foi atualizada para hospedá-los diretamente. Para suportar versões mais antigasFragmentActivity
foi introduzido.Activity
havia suporte para umActionBar
. Isso foi suportado em versões mais antigas pelaActionBarActivity
primeira vez, que agora foi preterido e substituído porAppCompatActivity
. Como ambas as classes se estendem,FragmentActivity
também oferecem suporte a hospedagemFragment
.Respostas:
Não.
Activity
é a linha de base. Toda atividade herdaActivity
, direta ou indiretamente.FragmentActivity
é para uso com o backport de fragmentos encontrados nas bibliotecassupport-v4
esupport-v13
. A implementação nativa de fragmentos foi adicionada no nível 11 da API, que é menor que osminSdkVersion
valores propostos . A única razão pela qual você precisaria considerarFragmentActivity
especificamente é se você deseja usar fragmentos aninhados (um fragmento contendo outro fragmento), pois isso não era suportado em fragmentos nativos até o Nível 17 da API.AppCompatActivity
é daappcompat-v7
biblioteca. Principalmente, isso oferece um backport da barra de ação. Como a barra de ação nativa foi adicionada no nível 11 da API, você não precisaAppCompatActivity
disso. No entanto, as versões atuaisappcompat-v7
também adicionam um backport limitado da estética do Material Design, em termos da barra de ação e de vários widgets. Existem prós e contras do usoappcompat-v7
, muito além do escopo desta resposta específica do Stack Overflow.ActionBarActivity
é o nome antigo da atividade base deappcompat-v7
. Por várias razões, eles queriam mudar o nome. A menos que alguma biblioteca de terceiros que você está usando insiste em umActionBarActivity
, você deve preferirAppCompatActivity
maisActionBarActivity
.Portanto, considerando o seu
minSdkVersion
intervalo entre 15 e 16:Se você deseja uma aparência de Design de Material com backport, use
AppCompatActivity
Caso contrário, mas você deseja fragmentos aninhados, use
FragmentActivity
Caso contrário, use
Activity
Apenas adicionando do comentário como nota:
AppCompatActivity
estendeFragmentActivity
, para que qualquer pessoa que precise usar os recursos doFragmentActivity
pode usarAppCompatActivity
.fonte
FragmentActivity
é um ancestral deAppCompatActivity
. Embora eu não recomende o uso de fragmentos aninhados, na medida em que os fragmentos aninhados funcionem,AppCompatActivity
ele oferecerá suporte a fragmentos aninhados.Activity
a maioria das novidades, sem,support-v7
por exemplo, design de material não suportado. Meu objetivo é min 19 target 25Theme.Material
, você precisaminSdkVersion
de 21 ou superior.Activity
é a classe base de todas as outras atividades, não acho que será preterido. A relação entre eles é:Activity
<-FragmentActivity
<-AppCompatActivity
<-ActionBarActivity
'<-' significa herança aqui. A referência mencionada
ActionBarActivity
está obsoleta, use emAppCompatActivity
vez disso.Então, basicamente, usar
AppCompatActivity
é sempre a escolha certa. As diferenças entre eles são:Activity
é o básico.Activity
,FragmentActivity
fornece a capacidade de usarFragment
.FragmentActivity
,AppCompatActivity
fornece recursos paraActionBar
.fonte
2019: Uso
AppCompatActivity
No momento da redação deste texto (verifique o link para confirmar que ainda é verdade), a Documentação do Android recomenda o uso
AppCompatActivity
se você estiver usando uma Barra de Aplicativos.Este é o racional dado:
As instruções gerais para adicionar uma barra de ferramentas são
AppCompatActivity
NoActionBar
.ToolBar
ao layout xml de cada atividade.ToolBar
em cada atividadeonCreate
.Consulte as instruções da documentação para obter mais detalhes. Eles são bastante claros e úteis.
fonte
Para um nível mínimo de API de 15, convém usar
AppCompatActivity
. Então, por exemplo, vocêMainActivity
ficaria assim:Para usar o
AppCompatActivity
, verifique se você baixou a Biblioteca de suporte do Google (verifique isso em Ferramentas -> Android -> Gerenciador de SDK). Em seguida, inclua a dependência gradle no arquivo gradle.build do seu aplicativo:Você pode usar isso
AppCompat
como principalActivity
, que pode ser usado para iniciar fragmentos ou outras atividades (isso depende do tipo de aplicativo que você está criando).O livro do BigNerdRanch é um bom recurso, mas sim, está desatualizado. Leia-o para obter informações gerais sobre como o Android funciona, mas não espere que as classes específicas que eles usam estejam atualizadas.
fonte
Activity
classe é a classe básica. (O original) Ele suporta gerenciamento de fragmentos (desde API 11). Não é mais recomendado seu uso puro, porque suas especializações são muito melhores.ActionBarActivity
foi em um momento a substituição da classe Activity, porque facilitou o manuseio da ActionBar em um aplicativo.AppCompatActivity
é o novo caminho a seguir, porque o ActionBar não é mais incentivado e você deve usar a Barra de Ferramentas (que atualmente é a substituição do ActionBar). AppCompatActivity herda de FragmentActivity; portanto, se você precisar manipular fragmentos, é possível (via Gerenciador de fragmentos). AppCompatActivity é para QUALQUER API, não apenas para maiores de 16 anos (quem disse isso?). Você pode usá-lo adicionandocompile 'com.android.support:appcompat-v7:24:2.0'
no seu arquivo Gradle. Eu o uso na API 10 e funciona perfeitamente.fonte
Toolbar
.Há muita confusão aqui, especialmente se você ler fontes desatualizadas.
O básico é
Activity
que pode mostrar fragmentos. Você pode usar essa combinação se estiver na versão Android> 4.No entanto, há também uma biblioteca de suporte que abrange as outras classes que você mencionou:
FragmentActivity
,ActionBarActivity
eAppCompat
. Originalmente, eles eram usados para oferecer suporte a fragmentos nas versões do Android <4, mas na verdade também são usados para suportar a funcionalidade de versões mais recentes do Android (design do material, por exemplo).O mais recente é que
AppCompat
os outros 2 são mais antigos. A estratégia que eu uso é sempre usarAppCompat
, para que o aplicativo esteja pronto em caso de backports de versões futuras do Android.fonte
Se você falar sobre
Activity
,AppcompactActivity
,ActionBarActivity
etc etc ..Precisamos falar sobre as classes Base que elas estão estendendo. Primeiro, precisamos entender a hierarquia das super classes.
Todas as coisas são iniciadas no Contexto, que é uma super classe para todas essas classes.
Context
é seguido ou estendido porContextWrapper
Agora chegamos a
Activity
As Classes abaixo são restritas a estender, mas elas são estendidas internamente por seu descendente e fornecem suporte para APIs específicas
agora FragmentActivty
Ao usar essa classe, em oposição ao suporte integrado ao fragmento e carregador da nova plataforma, você deve usar os métodos
getSupportFragmentManager()
egetSupportLoaderManager()
respectivamente para acessar esses recursos.Em 2015, o ActionBarActivity foi descontinuado na revisão 22.1.0 da Biblioteca de suporte. AppCompatActivity deve ser usado.
Você pode adicionar um ActionBar à sua atividade ao executar na API nível 7 ou superior, estendendo esta classe para sua atividade e definindo o tema da atividade como
Theme.AppCompat
ou um tema semelhanteRefiro esses dois um , dois
fonte
Como o nome provavelmente mudará em versões futuras do Android (atualmente a mais recente é,
AppCompatActivity
mas provavelmente mudará em algum momento), acredito que uma coisa boa a se ter é uma classeActivity
que se estendeAppCompatActivity
e, em seguida, todas as suas atividades se estendem dessa. Se amanhã, eles mudarem o nome para,AppCompatActivity2
por exemplo, você precisará alterá-lo apenas em um só lugar.fonte
AppCompatActivity estende FragmentActivity estende BaseFragmentActivityApi16 estende BaseFragmentActivityApi14 estende SupportActivity estende atividade
Portanto, a atividade é mais rápida do que tudo e AppCompatActivity é o melhor de todos.
fonte