Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

Criar um Fragment

Você pode imaginar um Fragment como uma seção modular de uma atividade, que tem o próprio ciclo de vida, recebe os próprios eventos de entrada e que pode ser adicionada ou removida durante a execução da atividade (uma espécie de “subatividade” que pode ser reutilizada em diferentes atividades). Essa lição mostra como ampliar a classe Fragment usando a Biblioteca de suporte para que o aplicativo permaneça compatível com dispositivos que têm versões de sistema antigas como o Android 1.6.

Em vez de configurar seus componentes dependentes nos métodos de ciclo de vida do seu Fragment, você deve criar um componente ciente do ciclo de vida. O componente pode processar qualquer configuração ou interrupção necessária à medida que seu Fragment avança no próprio ciclo de vida. O componente ciente do ciclo de vida pode ser reutilizado em outros Fragments e Activities para evitar duplicação de código e reduzir a quantidade de configuração necessária nos próprios Fragments/Activities. Para saber mais, leia o artigo Como gerenciar componentes cientes do ciclo de vida.

Antes de prosseguir com esta lição, configure o projeto Android para usar a Biblioteca de suporte. Se você nunca usou a Biblioteca de suporte, configure o projeto para usar a biblioteca v4 seguindo as instruções do documento Configuração da Biblioteca de suporte. No entanto, você também pode incluir a barra do aplicativo nas suas atividades em vez de usar a biblioteca AppCompat v7, que é compatível com Android 2.1 (API de nível 7) e também inclui as APIs Fragment.

Para saber mais sobre como implementar Fragments, consulte Fragments. ou explore o aplicativo de amostra relevante para mais informações.

Criar uma classe de Fragment

Para criar um Fragment, amplie a classe Fragment e substitua os principais métodos de ciclo de vida para inserir a lógica do seu aplicativo, de modo similar ao que usaria para uma classe Activity.

Uma diferença na criação de um Fragment é que você deve usar um callback onCreateView() para definir o layout. De fato, esse é o único callback necessário para executar um Fragment. Por exemplo, aqui está um Fragment simples que especifica o próprio layout:

Kotlin

import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.ViewGroup

class ArticleFragment : Fragment() {
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup,
                     savedInstanceState: Bundle?): View {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.article_view, container, false)
    }
}

Java

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.ViewGroup;

public class ArticleFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.article_view, container, false);
    }
}

Exatamente como uma atividade, um Fragment deve implementar outros callbacks de ciclo de vida que permitam o gerenciamento do estado à medida que é adicionado ou removido de uma atividade e à medida que a atividade passa pelos estágios do ciclo de vida. Por exemplo, quando o método onPause() da atividade é chamado, os Fragments na atividade também recebem uma chamada para onPause().

Há mais informações sobre o ciclo de vida do Fragment e métodos de callback disponíveis no guia do desenvolvedor de Fragments.

Adicionar um Fragment a uma Activity usando XML

Apesar de que os Fragments são componentes da IU modulares e reutilizáveis, cada instância de uma classe Fragment deve ser associada a uma FragmentActivity pai. Você pode chegar nessa associação definindo cada Fragment dentro do arquivo XML de layout da atividade.

Observação: FragmentActivity é uma atividade especial fornecida na Biblioteca de suporte para lidar com Fragments em versões mais antigas que a API de nível 11. Se a versão mais antiga compatível é a API de nível 11, você pode usar uma Activity regular.

Este é um exemplo de arquivo de layout que adiciona dois Fragments a uma atividade quando a tela do dispositivo é considerada “grande” (especificada pelo qualificador large no nome do diretório).

res/layout-large/news_articles.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <fragment android:name="com.example.android.fragments.HeadlinesFragment"
              android:id="@+id/headlines_fragment"
              android:layout_weight="1"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

    <fragment android:name="com.example.android.fragments.ArticleFragment"
              android:id="@+id/article_fragment"
              android:layout_weight="2"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

</LinearLayout>

Dica: se quiser saber mais sobre a criação de layouts para diferentes tamanhos de tela, leia Compatibilidade com diferentes tamanhos de tela.

Depois, aplique o layout à atividade:

Kotlin

import android.os.Bundle
import android.support.v4.app.FragmentActivity

class MainActivity : FragmentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.news_articles)
    }
}

Java

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class MainActivity extends FragmentActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.news_articles);
    }
}

Se você estiver usando a biblioteca AppCompat v7, a atividade deverá ampliar AppCompatActivity, que é uma subclasse de FragmentActivity. Para mais informações, leia Como adicionar a barra do aplicativo.

Observação: ao adicionar um Fragment a um layout de atividade definindo o Fragment no arquivo XML de layout, não será possível remover o Fragment no tempo de execução. Se você planeja inserir e retirar os Fragments durante a interação do usuário, é necessário adicionar o Fragment à atividade quando ela for iniciada pela primeira vez, conforme mostrado em Criar uma IU flexível.