Estou pensando em implementar uma tela com Activity
e todas as outras telas com Fragments
e managing all the fragments thru the activity
.
É uma boa ideia? e minha resposta é NÃO, mas ainda quero saber mais claramente sobre esse pensamento.
Quais são os prós e os contras da ideia?
Nota:
Por favor, não me dê o link para fragmento e atividade.
EDITAR:
Aqui está algo sobre Fragmentos e atividade:
Prós:
- Fragmentos devem ser usados com atividades como uma sub atividade.
- Fragmentos não substituem as atividades.
- Fragmentos destinam-se à reutilização (é necessário saber de que maneira a reutilização pode ser alcançada.).
- Fragmentos são a melhor maneira de escrever código para suportar tablets e telefones.
Contras:
- Precisamos implementar a interface para obter os dados dos fragmentos.
- Para o diálogo, precisamos percorrer um longo caminho para mostrá-lo.
Por que devemos usar fragmentos se não estamos considerando comprimidos? Qual é a diferença de horário de início entre atividade e fragmento?
android
android-layout
android-activity
android-fragments
android-lifecycle
Vineet Shukla
fonte
fonte
Respostas:
Depende do aplicativo que você está criando. Criei vários aplicativos usando as duas abordagens e não posso dizer que uma maneira é sempre melhor que a outra. O aplicativo mais recente que criei, usei a
Activity
abordagem única e uma navegação no estilo do Facebook. Ao selecionar itens da lista de navegação, atualizo um únicoFragment
contêiner para exibir essa seção.Dito isto, ter um single
Activity
também apresenta muitas complexidades. Digamos que você tenha um formulário de edição e, para alguns dos itens que o usuário precise selecionar ou criar, exija que eles acessem uma nova tela. Com as atividades, chamaríamos apenas a nova tela,startActivityForResult
mas, comoFragments
não existe, você acaba armazenando o valor noActivity
e fazendo com que o fragmento de edição principal verifiqueActivity
se os dados foram selecionados e devem ser exibidos ao usuário.O que Aravind diz sobre ficar preso a um único
Activity
tipo também é verdade, mas não é realmente esse limite. Sua atividade seria uma FragmentActivity e, desde que você não precise de umMapView
, não haverá limitações reais. No entanto, se você deseja exibir mapas, isso pode ser feito, mas você precisará modificar a Biblioteca de Compatibilidade do Android paraFragmentActivity
estenderMapActivity
ou usar o android-support-v4-googlemaps publicamente disponível .Por fim, a maioria dos desenvolvedores que conheço que seguiram a única
Activity
rota retornaram a várias atividades para simplificar seu código. No que diz respeito à interface do usuário, em um tablet, algumas vezes você fica preso usando um únicoActivity
para alcançar a interação sempre louca que seus designers criam :)- EDITAR -
O Google finalmente foi lançado
MapFragment
na biblioteca de compatibilidade, para que você não precise mais usar o hack android-support-v4-googlemaps. Leia sobre a atualização aqui: API Android do Google Maps v2- EDIÇÃO 2 -
Acabei de ler este ótimo post sobre o estado moderno (2017) dos fragmentos e lembrei-me dessa resposta antiga. Pensei em compartilhar: Fragmentos: a solução para todos os problemas do Android
fonte
settargetfragment
e você pode lidar com a atividade comostartforresult
procedimento.Estou prestes a terminar um projeto (5 meses em desenvolvimento), com 1 atividade e 17 fragmentos, todos em tela cheia. Este é o meu segundo projeto baseado em fragmentos (o anterior era de 4 meses).
Prós
finish()
todas as atividades não visíveis e criar a mesma lógica de controle para navegação, como faria com os fragmentos. Poderia fazê-lo com fragmentos apenas por causa disso.Contras
fonte
Primeiro, faça o que fizer, verifique se você possui um design modular usando modelo, visualização e apresentador que não seja altamente dependente de uma atividade ou de um fragmento.
O que as atividades e os fragmentos realmente oferecem?
Portanto, usá-los para que, SOMENTE . Eles têm responsabilidade suficiente, não os compliquem demais. Eu argumentaria que até mesmo intantar um TextView em uma atividade ou fragmento é uma prática ruim. Há uma razão pela qual métodos como Public View findViewById (int id) são PUBLIC .
Agora, a pergunta fica mais simples: preciso de vários eventos e bastidores independentes do ciclo de vida? Se você acha que sim, use fragmentos. Se você pensa que nunca, não use fragmentos.
No final, você pode fazer seu próprio backstack e ciclos de vida. Mas, por que recriar a roda?
EDIT: Por que votar isso? Classes de propósito único pessoas! Cada atividade ou fragmento deve ser capaz de instanciar um apresentador que instancia uma exibição. O apresentador e a visualização são um módulo que pode ser trocado. Por que uma atividade ou fragmento deve ter a responsabilidade de um apresentador?
fonte
Prós
Você pode controlar seus fragmentos a partir de uma única atividade, porque todos os fragmentos são independentes um do outro. Os fragmentos têm um ciclo de vida (
onPause
,onCreate
,onStart
...) dos seus próprios. Por ter um ciclo de vida, os fragmentos podem responder independentemente aos eventos, salvar seu estadoonSaveInstanceState
e ser recuperados (ou seja, ao retomar após uma chamada recebida ou quando o usuário clica no botão Voltar).Contras
No entanto, é uma boa idéia, como se você precisasse criar um aplicativo, no qual deseja mostrar várias visualizações. Com essa ideia, você poderá visualizar vários fragmentos em uma única exibição.
fonte
Depende do layout do design do seu aplicativo. Suponha que, se você estiver usando Guias no ActionBar no layout de design, na Atividade Única do aplicativo for possível alterar fragmentos ao clicar no Tab. Portanto, agora você tem uma atividade e digamos que suponha três guias na ActionBar e a exibição das guias fornecidas pelos fragmentos, o que facilita o gerenciamento do plus também é viável. Portanto, tudo depende do esquema de design do seu aplicativo e de como você toma a decisão de criar para ele.
fonte
Prós:
Contras:
Acredito que é uma boa ideia, porque o uso de diferentes layouts xml com base no tamanho e na orientação atuais da tela pode tornar o aplicativo mais utilizável e reduzir a necessidade de lançar várias versões do aplicativo, se você planeja lançá-lo para telefones e tablets. Se seu aplicativo nunca será usado por tablets e telefones, provavelmente não vale a pena.
fonte
Sou um defensor do adiamento de toda a inflação de vista para fragmentos para fornecer melhor flexibilidade. Por exemplo, ter uma única atividade de aterrissagem para um tablet que agrega vários fragmentos e reutiliza os mesmos fragmentos em um telefone para mostrar uma tela por fragmento. No entanto, na implementação do telefone, eu teria uma atividade separada para cada tela. As atividades não teriam muito código, pois adiariam imediatamente para o fragmento correspondente para visualizar a inflação.
Acho que é uma má ideia que a implementação do telefone tenha que mudar para uma única atividade de aterrissagem quando guias ou um menu deslizante são introduzidos, pois a navegação por guias ou menus resulta apenas em uma tela completamente nova.
fonte
A razão mais importante que eu daria para não usar a abordagem de atividade única é para que o ciclo de vida da atividade possa ser aproveitado. As atividades contêm comportamento contextual de uma certa parte do aplicativo e fragmentos complementam esse comportamento. Ter a capacidade de tirar proveito das etapas substituíveis no ciclo de vida da atividade ajuda a separar o comportamento de uma atividade da outra por métodos como
onPause
eonResume
. Esse ciclo de vida também permite retornar ao contexto anterior. Com a abordagem de atividade única, depois de deixar um fragmento, é necessário criar um mecanismo para retornar a ele.fonte