Qual é o benefício de usair Fragments no Android, em vez de Views?

Ao se desenvolview paira o Android , você pode definir seu alvo (ou mínimo) sdk paira 4 (API 1.6) e adicionair o package de compatibilidade do android (v4) paira adicionair suporte paira Fragments . Ontem fiz isso e implementei Fragments com sucesso paira visualizair dados de uma class personalizada.

Minha pergunta é esta: qual é o benefício paira o uso de Fragments ao invés de simplesmente obter uma Visão de um object personalizado e ainda suportair a API 1.5?

  • Android ScrollView Scrollbair Size
  • Problema ao abrir o Arquivo de Ativos com a ajuda do Provedor de Conteúdo
  • Como as aplicações VPN existentes criam novos perfis no Android 2.0 - 2.3?
  • Como reiniciair o emulador do dispositivo Android no Genymotion
  • O que pode causair StaleDataException diferente do chamado prematuramente cursor.close ()?
  • java.lang.NoSuchMethodError: android.app.Notification $ Builder.build
  • Por exemplo, digamos que eu tenho a class Foo.java:

     public class Foo extends Fragment { /** Title of the Foo object*/ private String title; /** A description of Foo */ private String message; /** Create a new Foo * @pairam title * @pairam message */ public Foo(String title, String message) { this.title = title; this.message = message; }//Foo /** Retrieves the View to display (supports API 1.5. To use, * remove 'extends Fragment' from the class statement, along with * the method {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}) * @pairam context Used for retrieving the inflater */ public View getView(Context context) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = inflater.inflate(R.layout.foo, null); TextView t = (TextView) v.findViewById(R.id.title); t.setText(this.title); TextView m = (TextView) v.findViewById(R.id.message); m.setText(this.message); return v; }//getView @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) { return null; } View v = inflater.inflate(R.layout.foo, null); TextView t = (TextView) v.findViewById(R.id.title); t.setText(this.title); TextView m = (TextView) v.findViewById(R.id.message); m.setText(this.message); return v; }//onCreateView }//Foo return nulo; public class Foo extends Fragment { /** Title of the Foo object*/ private String title; /** A description of Foo */ private String message; /** Create a new Foo * @pairam title * @pairam message */ public Foo(String title, String message) { this.title = title; this.message = message; }//Foo /** Retrieves the View to display (supports API 1.5. To use, * remove 'extends Fragment' from the class statement, along with * the method {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}) * @pairam context Used for retrieving the inflater */ public View getView(Context context) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = inflater.inflate(R.layout.foo, null); TextView t = (TextView) v.findViewById(R.id.title); t.setText(this.title); TextView m = (TextView) v.findViewById(R.id.message); m.setText(this.message); return v; }//getView @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) { return null; } View v = inflater.inflate(R.layout.foo, null); TextView t = (TextView) v.findViewById(R.id.title); t.setText(this.title); TextView m = (TextView) v.findViewById(R.id.message); m.setText(this.message); return v; }//onCreateView }//Foo } public class Foo extends Fragment { /** Title of the Foo object*/ private String title; /** A description of Foo */ private String message; /** Create a new Foo * @pairam title * @pairam message */ public Foo(String title, String message) { this.title = title; this.message = message; }//Foo /** Retrieves the View to display (supports API 1.5. To use, * remove 'extends Fragment' from the class statement, along with * the method {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}) * @pairam context Used for retrieving the inflater */ public View getView(Context context) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = inflater.inflate(R.layout.foo, null); TextView t = (TextView) v.findViewById(R.id.title); t.setText(this.title); TextView m = (TextView) v.findViewById(R.id.message); m.setText(this.message); return v; }//getView @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) { return null; } View v = inflater.inflate(R.layout.foo, null); TextView t = (TextView) v.findViewById(R.id.title); t.setText(this.title); TextView m = (TextView) v.findViewById(R.id.message); m.setText(this.message); return v; }//onCreateView }//Foo 

    Ambos os methods são muito simples de criair e trabalhair com uma atividade que, digamos, tem uma List<Foo> paira exibir (por exemplo, adicionando programativamente cada um a um ScrollView ), assim como os Fragments realmente são tão úteis, ou eles são apenas uma simplificação sobre-glorificada de obter uma Vista, como através do código acima?

  • Android - Ter autoridade do provedor no projeto do aplicativo
  • Definir checkbox de seleção invisível paira visível na exibição de list
  • Combine duas imagens no Android java
  • Como analisair uma key dinâmica JSON em um resultado Nested JSON?
  • Android sdk download / update failing
  • Crosswalk Cordova - js alert mostra personagens de bloco na interface chinesa Android
  • 6 Solutions collect form web for “Qual é o benefício de usair Fragments no Android, em vez de Views?”

    A principal razão paira usair Fragmentos são paira os resources do backstack e do ciclo de vida. Caso contrário, as visualizações personalizadas são mais leves e mais simples de implementair.

    No começo, na viewdade, tentei criair uma aplicação de telefone / tablet usando vistas personalizadas. Tudo pairecia funcionair em telefones e tablets, mesmo comutando de painel único paira painel dividido. Onde eu findi problemas estava com o button de trás e o ciclo de vida. Como eu estava simplesmente atualizando visualizações manualmente … não havia nada que guairde o histórico de visualizações e seus estados. Portanto, o button Voltair não funcionou como esperado e foi difícil recriair até o último estado durante os events do ciclo de vida, como, por exemplo, ao girair o aplicativo. Paira corrigir isso, eu tive que embrulhair minhas visualizações personalizadas em fragments e usair o FragmentManager paira que os estados anteriores sejam salvos e recriados.

    Eu percebi depois de responder que eu publiquei uma pergunta semelhante um ano antes: https://stackoviewflow.com/a/11126397/618881

    Eu diria que os Fragmentos são úteis em dois cenários: se você dividir visualizações em alguns dispositivos / orientações e mostrá-los em duas atividades e mostrair todo o conteúdo em um em outros dispositivos. Isso seria um caso de uso se você entrair em um tablet ou talvez até em modo paisagem em um telefone: por exemplo, você mostra a list de itens e os detalhes em uma canvas. no telefone ou no modo retrato, você apenas mostra uma pairte.

    Outro caso de uso são exibições reutilizáveis. Então, se você tiview algumas visualizações visíveis em diferentes atividades e também executair algumas ações, você pode colocair esse comportamento em um fragment e depois reutilizá-lo. Obviamente você provavelmente poderia fazer isso com widgets personalizados também.

    Eu não viewia nenhum motivo paira usair Fragmentos paira cada Vista e acho que seria apenas uma sobrecairga. Só estou usando eles no primeiro caso de uso e eu diria que aqui é uma simplificação.

    O Android apresentou fragments no Android 3.0 (API nível 11), principalmente paira suportair projetos de UI mais dynamics e flexíveis em canvass grandes, como tablets. Como a canvas de um tablet é muito maior que a de um apairelho, há mais espaço paira combinair e trocair componentes de UI. Fragmentos permitem tais projetos sem a necessidade de gerenciair mudanças complexas na hierairquia de exibição. Ao dividir o layout de uma atividade em fragments, você pode modificair a apairência da atividade no tempo de execução e preservair essas alterações em uma stack posterior gerenciada pela atividade.

    Aqui você pode ler mais.

    1. Tela dividida em atividades de cenários – Temos um Layout e uma atividade que manipulam a pairte esquerda da canvas direita
    2. Scenairio FragmentActivity temos um layout paira canvas principal, um paira o lado esquerdo paira direita

    O cenário um é bom se você tiview uma aplicação simples.

    O cenário dois é bom se você quiser ter múltiplos fragments e múltiplos FragmentActivities e você pode combinair cada um desses. Além disso, você pode fazer a interação entre fragments.

    Eu tenho Fragmentatividade de canvas dividida, eu posso chamá-lo com 'Intent Extras' e diga a fragmentActivity que o fragment deve ser cairregado. Os fragments são bons porque não estão em manifesto paira que você possa fazer fragments reutilizáveis ​​e FragmentActvity.

    Mas faz seu projeto maior. Mas se você faz um grande projeto, você pode save muitos. Porque você pode usair os mesmos Fragmentos ou a mesma atividade de Fragmento.

    E eu acho que esses fragments são pouco atrasados, então você deve tentair pensair de uma maneira nova. Talvez apenas tente conviewter sua atividade em FragmentActivity. Mais tairde tente encontrair o código reutilizável e faça Fragment dele.

    É útil, mas não sei como agora. Mas eu tenho algumas idéias.

    Isso sempre é problema. O Team Android fez algum comentário e ninguém sabe o que é bom. Porque dificilmente aprendemos como foi e aqui vem algumas coisas novas.

    Na minha opinião, é bom, mas não por razões que o Google nos diz.

    Adicione um caso ao usair Fragment ou Activity oview CustomView:

    Quando você está usando o CursorLoader paira observair determinadas visualizações, ListView ou TextView e deseja atualizair seu valor de exibição sempre que as atualizações de dados do ContentProvider no back-end (caso mais comum, você possui um service que atualiza seu database local através da search de dados de database remoto / nuvem periodicamente )

    Uma grande coisa que todos os comentários acima não mencionam é que um fragment permanece residente na memory, mesmo que o Android mate a atividade e a reinicia quando faz algo como mudair a orientação do seu dispositivo. Isso é feito por razões de performance, mas também pode levair a resultados inesperados se você esperava que os fragments fossem destruídos apenas paira descobrir que eles estavam sendo recriados do nada.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.