Articles

O ciclo de vida do fragmento Android

hoje vamos aprender sobre o ciclo de vida do fragmento Android e implementar uma única classe de atividade consistindo de dois fragmentos na aplicação android.

o fragmento Android

Fragment classe no Android é usado para construir Interfaces de utilizador dinâmicas. O fragmento deve ser usado dentro da atividade. Uma grande vantagem dos fragmentos é que simplifica a tarefa de criar UI para vários tamanhos de tela. Uma atividade pode conter qualquer número de fragmentos.

Um fragmento Android não é por si só uma subclasse de visão que a maioria dos outros componentes UI são. Em vez disso, um fragmento tem uma vista dentro dele. É esta visão que é eventualmente exibida dentro da atividade na qual o fragmento vive.

porque um fragmento android não é uma vista, adicioná-lo a uma atividade parece um pouco diferente do que adicionar uma vista (por exemplo, TextView). Um fragmento é adicionado a um grupo de visualização dentro da actividade. A vista do fragmento é mostrada dentro deste grupo de visualização.

O diagrama seguinte mostra o que acontece quando um fragmento é adicionado a uma actividade:

fragmento android

primeiro a actividade obtém uma referência ao fragmento. Em seguida, obtém uma referência ao grupo de visualização que a vista do fragmento será renderizada dentro. Em seguida, a atividade adiciona o fragmento. O fragmento então cria sua visão e retorna à atividade. A vista é então inserida no Pai do grupo de visualização, e o fragmento está vivo.

ciclo de vida de fragmentos

ciclo de vida de fragmentos de Android é ilustrado abaixo da imagem.

Android fragment lifecycle

abaixo estão os métodos do ciclo de vida dos fragmentos.

  1. : este método será chamado Primeiro, mesmo antes do oncreato(), informando-nos que o seu fragmento foi ligado a uma actividade. Passou-lhe a actividade que irá hospedar o seu fragmento
  2. onCreateView() : O sistema chama este callback quando é hora do fragmento desenhar sua UI pela primeira vez. Para desenhar uma UI para o fragmento, um componente de vista deve ser devolvido a partir deste método que é a raiz do layout do fragmento. Podemos retornar nulo se o fragmento não fornecer um UI
  3. onViewCreated() : isto será chamado após onCreateView(). Isto é particularmente útil ao herdar a implementação onCreateView (), mas precisamos de configurar as vistas resultantes, como com uma ListFragment e quando configurar um adaptador
  4. onActivityCreated() :Este será chamado após o oncreato() e o oncreview(), para indicar que o oncreato da atividade() foi concluído. Se há algo que é necessário para ser inicializado no fragmento que depende a actividade do onCreate (), tendo concluído o seu trabalho, então onActivityCreated() pode ser usado para a inicialização de trabalho
  5. onStart() : onStart() o método é chamado uma vez que o fragmento se torna visível
  6. onPause() : O sistema chama este método como o primeiro indício de que o usuário está deixando o fragmento. Este é geralmente o lugar onde você deve confirmar qualquer alteração que deve ser mantida para além da sessão atual do usuário
  7. onStop() : Fragmento vai ser parado, chamando onStop()
  8. onDestroyView() : É chamado antes de onDestroy(). Este é o equivalente ao onCreateView() onde montamos a IU. Se há coisas que são necessárias para serem limpas especificamente para a IU, então essa lógica pode ser colocada em onDestroyView ()
  9. onDestroy() : onDestroy() chamado para fazer a limpeza final do Estado do fragmento, mas não garantido para ser chamado pela plataforma Android.
  10. onDetach() : é chamado depois de onDestroy(), para notificar que o fragmento foi dissociado de sua atividade de hospedagem

Classes de fragmentos Android

fragmentos foram adicionados à API Android em favo mel(API 11).

  1. android.app.Fragment : A classe base para todas as fragmento de definições
  2. android.app.FragmentManager : A classe para interagir com objetos de fragmentos dentro de uma atividade
  3. android.app.FragmentTransaction : a classe para executar um conjunto atômico de operações de fragmentos
  4. ao usar uma biblioteca de pacotes de compatibilidade fornecida pela Google, as seguintes classes são usadas para implementação.

  • android.support.v4.app.FragmentActivity : A classe base para todas as atividades utilizando compatibilidade baseado no fragmento (e carregador) características
  • android.support.v4.app.Fragment
  • android.support.v4.app.FragmentManager
  • android.support.v4.app.FragmentTransaction
  • Android Fragmento onCreateView()

    Aqui um fragmento de exemplo usando onCreateView() para a sua implementação:

public class SampleFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup parentViewGroup, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_sample, parentViewGroup, false); return rootView; }}

onCreateView() método obtém uma LayoutInflater, um ViewGroup e um Pacote como parâmetros.

LayoutInflater é um componente que pode criar uma instância de visualização baseada em arquivos XML de layout. Como você pode ver, o exemplo realmente faz isso chamando layout.inflate().

inflate() o método toma três parâmetros: o id de um ficheiro XML de layout (dentro da disposição R.), um grupo de visualização pai no qual a Vista do fragmento deve ser inserida, e um terceiro booleano a dizer se a Vista do fragmento como inflada do ficheiro XML de layout deve ser inserida no grupo de visualização pai. Neste caso, vamos passar falso porque a vista será anexada ao grupo de visualização pai em outro lugar, por algum do Código Android que chamamos. Quando passar o false como último parâmetro a inflar(), o grupo de visualização pai ainda é usado para calcular a disposição da janela inflada, por isso não poderá passar o null como grupo de visualização pai .

ViewGroup parâmetro de onCreateView() é o grupo de visualização principal no qual a Vista do fragmento deve ser inserida. Este é um grupo de visualização dentro da atividade que irá “hospedar” o fragmento.

Bundle parâmetro de onCreateView() é um pacote no qual o fragmento pode salvar dados, assim como em uma atividade.

Android Fragment Example

Android fragments example project comprises of a single activity holding two fragments: TextFragment and MenuFragment respectively.

android fragment example

Android Fragment Example Code

The MainActivity holds the two fragments TextFragment and MenuFragment. Então vamos começar com a definição de fragmentos xml de layout

activity_main.xml

<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:weightSum="1.0"> <fragment android:layout_height="match_parent" android:layout_width="match_parent" class="journaldev.com.fragments.fragments.MenuFragment" android:id="@+id/fragment" android:layout_weight="0.5"/> <fragment android:layout_width="match_parent" android:layout_height="match_parent" class="journaldev.com.fragments.fragments.TextFragment" android:id="@+id/fragment2" android:layout_weight="0.5"/></LinearLayout>

Como podemos ver os arquivos de classe dos fragmentos que fazem parte desta atividade são definidos como classe=”journaldev.com.fragmentos.fragmentos.TextFragment”

O fragmento de classes e seus esquemas são definidos como mostrado nos trechos abaixo.

package journaldev.com.fragments.fragments;import android.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import journaldev.com.fragments.R;public class TextFragment extends Fragment { TextView text,vers; @Override public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.text_fragment, container, false); text= (TextView) view.findViewById(R.id.AndroidOs); vers= (TextView)view.findViewById(R.id.Version); return view; } public void change(String txt, String txt1){ text.setText(txt); vers.setText(txt1); }}

text_fragment.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:gravity="center" android:background="#5ba4e5" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="40px" android:textColor="#ffffff" android:layout_gravity="center" android:id="@+id/AndroidOs"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:textColor="#ffffff" android:textSize="30px" android:id="@+id/Version"/></LinearLayout>

o texto é composto por textos com o nome e o número da versão android.

package journaldev.com.fragments.fragments;import android.app.ListFragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ListView;import journaldev.com.fragments.R;public class MenuFragment extends ListFragment { String AndroidOS = new String { "Cupcake","Donut","Eclair","Froyo","Gingerbread","Honeycomb","Ice Cream SandWich","Jelly Bean","KitKat" }; String Version = new String{"1.5","1.6","2.0-2.1","2.2","2.3","3.0-3.2","4.0","4.1-4.3","4.4"}; @Override public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { View view =inflater.inflate(R.layout.list_fragment, container, false); ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, AndroidOS); setListAdapter(adapter); return view; } @Override public void onListItemClick(ListView l, View v, int position, long id) { TextFragment txt = (TextFragment)getFragmentManager().findFragmentById(R.id.fragment2); txt.change(AndroidOS,"Version : "+Version); getListView().setSelector(android.R.color.holo_blue_dark); }}

list_fragment.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@android:id/list" /></LinearLayout>

O MenuFragment apresenta um ListView. Como podemos ver aqui, a disposição da ListView é por omissão simple_ list_ item_1 em oposição à disposição personalizada que criamos para a ListView no artigo anterior.

A MainActivity invoca o setContentView do método de onCreate, só isso. Os fragmentos são chamados a partir do arquivo xml.

alternativamente, podemos adicionar os fragmentos da classe de actividade usando FragmentManager como mostrado no excerto abaixo:

getFragmentManager() .beginTransaction() .add(R.id.fragmentParentViewGroup, new MyFragment()) .commit();

Aqui o id fragmentParentViewGroup pertence o FrameLayout mostrado abaixo:

<FrameLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:tools="https://schemas.android.com/tools" android:id="@+id/fragmentParentViewGroup" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MyActivity" tools:ignore="MergeRootFrame" />

Android Fragmento Exemplo de Aplicação

Abaixo mostra a saída produzida pelo nosso projeto, você pode ver que os dois fragmentos estão presentes aqui e quando você selecionar qualquer uma delas no lado esquerdo do fragmento, obtém dados preenchidos no lado direito do fragmento.

exemplos de fragmentos de android, ciclo de vida de fragmentos

pode obter o projecto final do fragmento android a partir de abaixo da ligação.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *