Home | History | Annotate | Download | only in components
      1 page.title=Fragmentos
      2 parent.title=Atividades
      3 parent.link=activities.html
      4 @jd:body
      5 
      6 <div id="qv-wrapper">
      7 <div id="qv">
      8   <h2>Neste documento</h2>
      9   <ol>
     10     <li><a href="#Design">Filosofia do projeto</a></li>
     11     <li><a href="#Creating">Criao de um fragmento</a>
     12       <ol>
     13         <li><a href="#UI">Adio de uma interface do usurio</a></li>
     14         <li><a href="#Adding">Adio de um fragmento a uma atividade</a></li>
     15       </ol>
     16     </li>
     17     <li><a href="#Managing">Gerenciamento de fragmentos</a></li>
     18     <li><a href="#Transactions">Realizao de operaes com fragmentos</a></li>
     19     <li><a href="#CommunicatingWithActivity">Comunicao com a atividade</a>
     20       <ol>
     21         <li><a href="#EventCallbacks">Criao de eventos de retornos de chamada para a atividade</a></li>
     22         <li><a href="#ActionBar">Adio de itens  barra de ao</a></li>
     23       </ol>
     24     </li>
     25     <li><a href="#Lifecycle">Tratamento do ciclo de vida dos fragmentos</a>
     26       <ol>
     27         <li><a href="#CoordinatingWithActivity">Coordenao com o ciclo de vida da atividade</a></li>
     28       </ol>
     29     </li>
     30     <li><a href="#Example">Exemplo</a></li>
     31   </ol>
     32 
     33   <h2>Classes principais</h2>
     34   <ol>
     35     <li>{@link android.app.Fragment}</li>
     36     <li>{@link android.app.FragmentManager}</li>
     37     <li>{@link android.app.FragmentTransaction}</li>
     38   </ol>
     39   
     40   <h2>Veja tambm</h2>
     41   <ol>
     42     <li><a href="{@docRoot}training/basics/fragments/index.html">Construo de uma IU dinmica com Fragmentos</a></li>
     43     <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Compatibilidade com
     44 tablets e celulares</a></li>
     45   </ol>
     46 </div>
     47 </div>
     48 
     49 <p>Um {@link android.app.Fragment} representa o comportamento ou uma parte da interface do usurio em um
     50 {@link android.app.Activity}.  possvel combinar vrios fragmentos em uma nica atividade para compilar
     51 uma IU de painis mltiplos e reutilizar um fragmento em diversas atividades. Um fragmento
     52  como uma seo modular de uma atividade, que tem o prprio ciclo de vida, recebe os prprios eventos de entrada
     53 e que pode ser adicionado ou removido com a atividade em execuo (uma espcie de "sub-atividade"
     54 que pode ser reutilizada em diferentes atividades).</p>
     55 
     56 <p>Um fragmento deve sempre ser embutido em uma atividade e o ciclo de vida dele
     57  diretamente impactado pelo ciclo de vida da atividade do host. Por exemplo, quando a atividade  pausada, todos os fragmentos
     58 tambm so e, quando a atividade  destruda, todos os fragmentos tambm so. No entanto, enquanto
     59 uma atividade estiver em execuo (estiver no <em>estado do ciclo de vida</em> <a href="{@docRoot}guide/components/activities.html#Lifecycle">retomado</a>),  possvel
     60 manipular cada fragmento independentemente, como adicionar ou remov-los. Ao realizar tal operao com fragmentos,
     61 tambm  possvel adicion-los a uma pilha de retorno que  gerenciada pela
     62 atividade &mdash; cada entrada da pilha de retorno na atividade  um registro da operao de fragmento
     63 que ocorreu. A pilha de retorno permite que o usurio inverta uma operao de fragmento (navegue ao contrrio),
     64 pressionando o boto <em>Voltar</em>.</p>
     65 
     66 <p>Ao adicionar um fragmento como parte do layout da atividade, ele viver em um {@link
     67 android.view.ViewGroup} dentro da hierarquia de vistas e o fragmento definir o prprio
     68 layout da vista.
     69  possvel inserir um fragmento no layout, declarando-o no arquivo de layout
     70 da atividade, como um elemento {@code &lt;fragment&gt;} ou a partir do cdigo do aplicativo adicionando-o
     71 a um {@link android.view.ViewGroup} existente. No entanto, no  necessrio que um fragmento faa parte
     72 do layout da atividade; tambm  possvel usar um fragmento sem a IU como um trabalhador invisvel
     73 da atividade.</p>
     74 
     75 <p>Este documento descreve como compilar o aplicativo para usar fragmentos,
     76 incluindo como os fragmentos podem manter seu estado ao serem adicionados  pilha de retorno da atividade,
     77 como compartilhar eventos com a atividade e com outros fragmentos da atividade, como contribuir para a barra de ao
     78 da atividade e muito mais.</p>
     79 
     80 
     81 <h2 id="Design">Filosofia do projeto</h2>
     82 
     83 <p>O Android introduziu os fragmentos no Android 3.0 (API de nvel 11), principalmente para suportar
     84 mais projetos de IU flexveis e dinmicos em telas grandes, como em tablets. Como a tela de um tablet
     85  muito maior que a de um celular, h mais espao para combinar
     86 e alternar componentes da IU. Os fragmentos permitem tais projetos sem haver a necessidade de gerenciar
     87 alteraes complexas na hierarquia de vistas. Ao dividir o layout de uma atividade em fragmentos,  possvel
     88 modificar a aparncia da atividade em tempo de execuo e preservar essas alteraes na pilha de retorno,
     89 que  gerenciada por esta atividade.</p>
     90 
     91 <p>Por exemplo, um aplicativo de notcias pode usar um fragmento para exibir uma lista de artigos
     92 na esquerda e outro fragmento para exibir um artigo na direita &mdash; ambos os fragmentos aparecem
     93 em uma atividade, lado a lado, e cada fragmento possui o prprio conjunto de mtodos de retorno de chamada do ciclo de vida e lidam
     94 com os prprios eventos de entrada do usurio. Portanto, em vez de usar uma atividade para selecionar um artigo
     95 e outra atividade para l-lo, o usurio pode selecionar um artigo e l-lo por completo dentro
     96 da mesma atividade, como ilustrado no layout do tablet na figura 1.</p>
     97 
     98 <p>Voc deve projetar cada fragmento como um componente modular e reutilizvel da atividade. Ou seja, como cada fragmento
     99 define seu prprio layout e comportamento com os prprios retornos de chamada do ciclo de vida,  possvel
    100 incluir um fragmento em vrias atividades para poder projet-lo para reutilizao e evitar
    101 a manipulao direta de um fragmento a partir de outro fragmento. Isto  especialmente importante porque
    102 um fragmento modular permite alterar as combinaes de fragmentos para tamanhos de tela diferentes. Ao projetar o aplicativo
    103 para ser compatvel com tablets e celulares, voc poder reutilizar os fragmentos em diferentes configuraes
    104 de layout para otimizar a experincia do usurio com base no espao de tela disponvel. Por exemplo,
    105 em um celular, talvez seja necessrio separar os fragmentos para fornecer uma IU de painel nico
    106 quando mais de um no se encaixar dentro da mesma atividade.</p>
    107 
    108 <img src="{@docRoot}images/fundamentals/fragments.png" alt="" />
    109 <p class="img-caption"><strong>Figura 1.</strong> Um exemplo de como dois mdulos de IU definidos
    110 pelos fragmentos podem ser combinados em uma atividade de um projeto para tablet mas separados
    111 em um projeto para celular.</p>
    112 
    113 <p>Por exemplo, &mdash; continuando com o exemplo do aplicativo de notcias &mdash; o aplicativo pode embutir
    114 dois fragmentos na <em>atividade A</em>, quando executado em um dispositivo do tamanho de um tablet. No entanto,
    115 em uma tela de tamanho de celular, no h espao suficiente para ambos os fragmentos, ento a <em>atividade A</em> inclui
    116 somente o fragmento da lista de artigos e, quando o usurio seleciona um artigo, ele inicia
    117 a <em>atividade B</em>, que inclui o segundo fragmento para ler o artigo. Portanto, o aplicativo
    118  compatvel com tablets e celulares atravs da reutilizao dos fragmentos em combinaes diferentes, como ilustrado
    119 na figura 1.</p>
    120 
    121 <p>Para obter mais informaes sobre o projeto de aplicativos com diferentes combinaes de fragmentos
    122 para configuraes de tela diferentes, consulte o guia <a href="{@docRoot}guide/practices/tablets-and-handsets.html">Compatibilidade com tablets e celulares</a>.</p>
    123 
    124 
    125 
    126 <h2 id="Creating">Criao de um fragmento</h2>
    127 
    128 <div class="figure" style="width:327px">
    129 <img src="{@docRoot}images/fragment_lifecycle.png" alt="" />
    130 <p class="img-caption"><strong>Figura 2.</strong> O ciclo de vida de um fragmento
    131 (enquanto sua atividade est em execuo).</p>
    132 </div>
    133 
    134 <p>Para criar um fragmento,  preciso criar uma subclasse de {@link android.app.Fragment} (ou uma respectiva
    135 subclasse existente). A classe {@link android.app.Fragment} tem um cdigo que  muito parecido
    136 com o de uma {@link android.app.Activity}. Ele contm mtodos de retorno de chamada semelhantes aos de uma atividade,
    137 como {@link android.app.Fragment#onCreate onCreate()}, {@link android.app.Fragment#onStart onStart()},
    138 {@link android.app.Fragment#onPause onPause()} e {@link android.app.Fragment#onStop onStop()}. Na verdade,
    139 caso esteja convertendo um aplicativo do Android existente para usar os fragmentos, basta mover
    140 o cdigo dos mtodos de retorno de chamada da atividade para os respectivos mtodos de retorno de chamada
    141 do fragmento.</p>
    142 
    143 <p>Geralmente, deve-se implementar pelo menos os seguintes mtodos de ciclo de vida:</p>
    144 
    145 <dl>
    146   <dt>{@link android.app.Fragment#onCreate onCreate()}</dt>
    147   <dd>O sistema o chama ao criar o fragmento. Dentro da implementao,
    148 deve-se inicializar os componentes essenciais do fragmento que deseja-se reter quando o fragmento
    149 for pausado ou interrompido e, em seguida, retomado.</dd>
    150   <dt>{@link android.app.Fragment#onCreateView onCreateView()}</dt>
    151   <dd>O sistema chama isto quando  o momento de o fragmento desenhar a interface do usurio
    152 pela primeira vez. Para desenhar uma IU para o fragmento, voc deve retornar uma {@link android.view.View}
    153 deste mtodo, que  a raiz do layout do fragmento.  possvel retornar como nulo se o fragmento
    154 no fornecer uma IU.</dd>
    155   <dt>{@link android.app.Activity#onPause onPause()}</dt>
    156   <dd>O sistema chama esse mtodo como o primeiro indcio de que o usurio est saindo
    157 do fragmento (embora no seja sempre uma indicao de que o fragmento est sendo destrudo).  quando geralmente
    158 deve-se confirmar qualquer alterao que deva se manter alm da sesso atual do usurio (porque
    159 o usurio pode no retornar).</dd>
    160 </dl>
    161 
    162 <p>A maioria dos aplicativos deve implementar pelo menos trs destes mtodos para cada fragmento,
    163 mas h vrios outros mtodos de retorno de chamada que voc deve usar para lidar com diversos estgios
    164 do ciclo de vida do fragmento. Todos os mtodos de retorno de chamada do ciclo de vida so abordados com mais detalhes na seo
    165 <a href="#Lifecycle">Tratamento do ciclo de vida dos fragmentos</a>.</p>
    166 
    167 
    168 <p>H tambm algumas subclasses que voc pode querer estender, em vez de a classe {@link
    169 android.app.Fragment} de base:</p>
    170 
    171 <dl>
    172   <dt>{@link android.app.DialogFragment}</dt>
    173   <dd>Exibe uma caixa de dilogo flutuante. Usar esta classe para criar uma caixa de dilogo  uma boa alternativa
    174 para usar mtodos auxiliares das caixas de dilogo na classe {@link android.app.Activity},
    175 pois  possvel incorporar uma caixa de dilogo de fragmento na pilha de retorno dos fragmentos gerenciados pela atividade,
    176 permitindo que o usurio retorne a um fragmento dispensado.</dd>
    177 
    178   <dt>{@link android.app.ListFragment}</dt>
    179   <dd>Exibe uma lista de itens que so gerenciados por um adaptador (como um {@link
    180 android.widget.SimpleCursorAdapter}), semelhante  {@link android.app.ListActivity}. Ele fornece vrios mtodos
    181 para gerenciar uma vista de lista, como o retorno de chamada {@link
    182 android.app.ListFragment#onListItemClick(ListView,View,int,long) onListItemClick()}
    183 para lidar com eventos de clique.</dd>
    184 
    185   <dt>{@link android.preference.PreferenceFragment}</dt>
    186   <dd>Exibe uma hierarquia de objetos {@link android.preference.Preference} como uma lista,
    187 parecido com {@link android.preference.PreferenceActivity}. Isto  til ao criar uma atividade
    188 de "configuraes" para o aplicativo.</dd>
    189 </dl>
    190 
    191 
    192 <h3 id="UI">Adio de uma interface do usurio</h3>
    193 
    194 <p>Um fragmento  geralmente usado como parte de uma interface do usurio da atividade e contribui
    195 para a atividade com seu prprio layout.</p>
    196 
    197 <p>Para fornecer um layout para um fragmento, voc deve implementar o mtodo de retorno de chamada {@link
    198 android.app.Fragment#onCreateView onCreateView()}, que o sistema Android chama
    199 no momento em que o fragmento deve desenhar o layout. A implementao deste mtodo deve retornar
    200 uma {@link android.view.View}, que  a raiz do layout do fragmento.</p>
    201 
    202 <p class="note"><strong>Observao:</strong> se o fragmento for uma subclasse de {@link
    203 android.app.ListFragment}, a implementao padro retornar uma {@link android.widget.ListView}
    204 de {@link android.app.Fragment#onCreateView onCreateView()}, ento no ser necessrio implement-lo.</p>
    205 
    206 <p>Para retornar um layout de {@link
    207 android.app.Fragment#onCreateView onCreateView()},  possvel infl-lo a partir de um <a href="{@docRoot}guide/topics/resources/layout-resource.html">recurso de layout</a> definido no XML. Para ajudar
    208 a fazer isto, o {@link android.app.Fragment#onCreateView onCreateView()} fornece
    209 um objeto {@link android.view.LayoutInflater}.</p>
    210 
    211 <p>Por exemplo, a seguir h uma subclasse de {@link android.app.Fragment} que carrega um layout
    212 do arquivo {@code example_fragment.xml}:</p>
    213 
    214 <pre>
    215 public static class ExampleFragment extends Fragment {
    216     &#64;Override
    217     public View onCreateView(LayoutInflater inflater, ViewGroup container,
    218                              Bundle savedInstanceState) {
    219         // Inflate the layout for this fragment
    220         return inflater.inflate(R.layout.example_fragment, container, false);
    221     }
    222 }
    223 </pre>
    224 
    225 <div class="sidebox-wrapper">
    226 <div class="sidebox">
    227   <h3>Criao de um layout</h3>
    228   <p>No exemplo acima, {@code R.layout.example_fragment}  uma referncia para um recurso de layout
    229 chamado {@code example_fragment.xml}, salvo nos recursos do aplicativo. Para obter informaes sobre
    230 como criar um layout no XML, consulte a documentao <a href="{@docRoot}guide/topics/ui/index.html">Interface do usurio</a>
    231 .</p>
    232 </div>
    233 </div>
    234 
    235 <p>O parmetro {@code container} passado para {@link android.app.Fragment#onCreateView
    236 onCreateView()}  o pai de {@link android.view.ViewGroup} (do layout da atividade)
    237 em que o layout do fragmento
    238 ser inserido. O parmetro {@code savedInstanceState}  um {@link android.os.Bundle}
    239 que fornece dados sobre a instncia anterior do fragmento, se o fragmento estiver sendo retomado
    240 (a restaurao de estado  abordada mais detalhadamente na seo <a href="#Lifecycle">Tratamento do ciclo
    241 de vida dos fragmentos</a>).</p>
    242 
    243 <p>O mtodo {@link android.view.LayoutInflater#inflate(int,ViewGroup,boolean) inflate()}
    244 usa trs argumentos:</p>
    245 <ul>
    246   <li>O ID de recurso do layout que voc quer inflar.</li>
    247   <li>O {@link android.view.ViewGroup} que ser pai do layout inflado. Passar o {@code
    248 container}  importante para que o sistema aplique os parmetros de layout  vista raiz
    249 do layout inflado, especificado pela vista pai em que est ocorrendo.</li>
    250   <li>Um booleano que indica se o layout inflado deve ser anexado a {@link
    251 android.view.ViewGroup} (o segundo parmetro) durante a inflao (neste caso,
    252 isto  falso, pois o sistema j est inserindo o layout inflado no {@code
    253 container} &mdash; retornar como verdadeiro criaria um grupo de vistas redundante no layout final).</li>
    254 </ul>
    255 
    256 <p>Este  o modo de criar um fragmento que fornece um layout. A seguir,
    257  preciso adicionar o fragmento  atividade.</p>
    258 
    259 
    260 
    261 <h3 id="Adding">Adio de um fragmento a uma atividade</h3>
    262 
    263 <p>Geralmente, um fragmento contribui com a atividade do host com uma parte da IU, que  embutida como parte
    264 da hierarquia de vistas geral da atividade. H duas formas de adicionar um fragmento ao layout
    265 da atividade:</p>
    266 
    267 <ul>
    268   <li><b>Declarar o fragmento dentro do arquivo de layout da atividade.</b>
    269 <p>Neste caso,
    270  possvel especificar as propriedades do layout para o fragmento como se fosse uma vista. Por exemplo, a seguir h o arquivo de layout
    271 para uma atividade com dois fragmentos:</p>
    272 <pre>
    273 &lt;?xml version="1.0" encoding="utf-8"?&gt;
    274 &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    275     android:orientation="horizontal"
    276     android:layout_width="match_parent"
    277     android:layout_height="match_parent"&gt;
    278     &lt;fragment android:name="com.example.news.ArticleListFragment"
    279             android:id="@+id/list"
    280             android:layout_weight="1"
    281             android:layout_width="0dp"
    282             android:layout_height="match_parent" /&gt;
    283     &lt;fragment android:name="com.example.news.ArticleReaderFragment"
    284             android:id="@+id/viewer"
    285             android:layout_weight="2"
    286             android:layout_width="0dp"
    287             android:layout_height="match_parent" /&gt;
    288 &lt;/LinearLayout&gt;
    289 </pre>
    290   <p>O atributo {@code android:name} em {@code &lt;fragment&gt;} especifica a classe {@link
    291 android.app.Fragment} a instanciar no layout.</p>
    292 
    293 <p>Quando o sistema cria este layout de atividade, ele instancia cada fragmento especificado
    294 no layout e chama o mtodo {@link android.app.Fragment#onCreateView onCreateView()} para cada um
    295 para recuperar o layout de cada fragmento. O sistema insere a {@link android.view.View} retornada
    296 pelo fragmento diretamente no lugar do elemento {@code &lt;fragment&gt;}.</p>
    297 
    298 <div class="note">
    299   <p><strong>Observao:</strong> cada fragmento requer um identificador nico
    300 que o sistema possa usar para restaur-lo se a atividade for reiniciada (e que possa ser usado
    301 para capturar o fragmento para realizar operaes, como a remoo). H trs maneiras de fornecer
    302 um ID para um fragmento:</p>
    303   <ul>
    304     <li>Fornecer o atributo {@code android:id} com um ID nico.</li>
    305     <li>Fornecer o atributo {@code android:tag} com uma string nica.</li>
    306     <li>Caso no fornea nenhuma das alternativas anteriores, o sistema usar o ID da vista
    307 do recipiente.</li>
    308   </ul>
    309 </div>
    310   </li>
    311 
    312   <li><b>Ou adicionar programaticamente o fragmento a um {@link android.view.ViewGroup} existente.</b>
    313 <p>A qualquer momento, enquanto a atividade est em execuo,  possvel adicionar fragmentos ao layout da atividade. Voc precisa
    314 apenas especificar um {@link
    315 android.view.ViewGroup} para posicionar o fragmento.</p>
    316   <p>Para realizar operaes de fragmentos na atividade (como adicionar, remover ou substituir
    317 um fragmento), voc deve usar APIs de {@link android.app.FragmentTransaction}.  possvel adquirir
    318 uma instncia de {@link android.app.FragmentTransaction} da {@link android.app.Activity} desta maneira:</p>
    319 
    320 <pre>
    321 FragmentManager fragmentManager = {@link android.app.Activity#getFragmentManager()}
    322 FragmentTransaction fragmentTransaction = fragmentManager.{@link android.app.FragmentManager#beginTransaction()};
    323 </pre>
    324 
    325 <p> possvel adicionar um fragmento usando o mtodo {@link
    326 android.app.FragmentTransaction#add(int,Fragment) add()}, especificando o fragmento que ser adicionado
    327 e a vista em que ser inserido. Por exemplo:</p>
    328 
    329 <pre>
    330 ExampleFragment fragment = new ExampleFragment();
    331 fragmentTransaction.add(R.id.fragment_container, fragment);
    332 fragmentTransaction.commit();
    333 </pre>
    334 
    335   <p>O primeiro argumento passado para {@link android.app.FragmentTransaction#add(int,Fragment) add()}
    336  {@link android.view.ViewGroup}, onde o fragmento deve ser colocado, especificado
    337 pelo ID de recurso e o segundo parmetro  o fragmento a ser adicionado.</p>
    338   <p>Ao realizar as alteraes
    339 com {@link android.app.FragmentTransaction},
    340 deve-se chamar{@link android.app.FragmentTransaction#commit} para que as alteraes entrem em vigor.</p>
    341   </li>
    342 </ul>
    343 
    344 
    345 <h4 id="AddingWithoutUI">Adio de um fragmento sem IU</h4>
    346 
    347 <p>O exemplo acima mostra como adicionar um fragmento  atividade para fornecer uma IU. No entanto,
    348  possvel tambm usar um fragmento para fornecer o comportamento de segundo plano para a atividade sem apresentar
    349 IU adicional.</p>
    350 
    351 <p>Para adicionar um fragmento sem uma IU, adicione o fragmento da atividade usando {@link
    352 android.app.FragmentTransaction#add(Fragment,String)} (fornecendo uma "tag" de string nica
    353 para o fragmento, em vez de um ID de vista). Isto adiciona o fragmento, mas, como ele no est associado
    354 a uma vista no layout da atividade, no recebe uma chamada de {@link
    355 android.app.Fragment#onCreateView onCreateView()}. Portanto, no  necessrio implementar este mtodo.</p>
    356 
    357 <p>Fornecer uma tag de string para o fragmento no  algo estrito para fragmentos que no sejam de IU &mdash;  possvel tambm
    358 fornecer tags de string para fragmentos que possuam uma IU &mdash; mas, se o fragmento no possuir uma IU,
    359 a tag de string  a nica maneira de identific-lo. Caso queira obter o fragmento da atividade posteriormente,
    360 voc precisar usar {@link android.app.FragmentManager#findFragmentByTag
    361 findFragmentByTag()}.</p>
    362 
    363 <p>Para ver uma atividade de exemplo que usa um fragmento como um trabalhador de segundo plano, sem uma IU, consulte o exemplo de {@code
    364 FragmentRetainInstance.java}, incluso nos exemplos do SDK (disponibilizados pelo 
    365 Android SDK Manager) e localizado no sistema como 
    366 <code>&lt;sdk_root&gt;/APIDemos/app/src/main/java/com/example/android/apis/app/FragmentRetainInstance.java</code>.</p>
    367 
    368 
    369 
    370 <h2 id="Managing">Gerenciamento de fragmentos</h2>
    371 
    372 <p>Para gerenciar os fragmentos na atividade, voc precisa usar {@link android.app.FragmentManager}. Para adquiri-lo,
    373 chame {@link android.app.Activity#getFragmentManager()} a partir da atividade.</p>
    374 
    375 <p>Algumas das coisas que voc pode fazer com {@link android.app.FragmentManager} incluem:</p>
    376 
    377 <ul>
    378   <li>Adquirir fragmentos existentes na atividade, com {@link
    379 android.app.FragmentManager#findFragmentById findFragmentById()} (para fragmentos que forneam uma IU
    380 no layout da atividade) ou {@link android.app.FragmentManager#findFragmentByTag
    381 findFragmentByTag()} (para fragmentos que forneam ou no uma IU).</li> 
    382   <li>Retire os fragmentos da pilha de retorno com {@link
    383 android.app.FragmentManager#popBackStack()} (simulando um comando de <em>Voltar</em> do usurio).</li>
    384   <li>Registre uma escuta para as alteraes na pilha de retorno com {@link
    385 android.app.FragmentManager#addOnBackStackChangedListener addOnBackStackChangedListener()}.</li>
    386 </ul>
    387 
    388 <p>Para obter mais informaes sobre esses e outros mtodos, consulte a documentao da classe {@link
    389 android.app.FragmentManager}.</p>
    390 
    391 <p>Como demonstrado na seo anterior,  possvel usar o {@link android.app.FragmentManager}
    392 para abrir uma {@link android.app.FragmentTransaction}, que permite realizar operaes,
    393 como adicionar e remover fragmentos.</p>
    394 
    395 
    396 <h2 id="Transactions">Realizao de operaes com fragmentos</h2>
    397 
    398 <p>Um grande recurso fornecido por fragmentos em atividades  a possibilidade de adicionar, remover, substituir
    399 e realizar outras aes com eles em resposta  interao do usurio. Cada conjunto de alteraes que forem realizadas
    400 na atividade  chamado de operao e podem ser feitas usando APIs em {@link
    401 android.app.FragmentTransaction}. Tambm  possvel salvar cada operao em uma pilha de retorno gerenciada pela atividade,
    402 permitindo que o usurio navegue inversamente por meio de alteraes de fragmento (semelhante  navegao
    403 inversa por meio de atividades).</p>
    404 
    405 <p> possvel adquirir uma instncia de {@link android.app.FragmentTransaction} a partir do {@link
    406 android.app.FragmentManager} da seguinte forma:</p>
    407 
    408 <pre>
    409 FragmentManager fragmentManager = {@link android.app.Activity#getFragmentManager()};
    410 FragmentTransaction fragmentTransaction = fragmentManager.{@link android.app.FragmentManager#beginTransaction()};
    411 </pre>
    412 
    413 <p>Cada operao  um conjunto de alteraes que voc deseja realizar ao mesmo tempo.  possvel definir
    414 todas as alteraes desejadas para uma operao usando mtodos como {@link
    415 android.app.FragmentTransaction#add add()}, {@link android.app.FragmentTransaction#remove remove()}
    416 e {@link android.app.FragmentTransaction#replace replace()}. Em seguida, para aplicar a operao
    417  atividade, deve-se chamar {@link android.app.FragmentTransaction#commit()}.</p>
    418 </dl>
    419 
    420 <p>Antes de chamar {@link
    421 android.app.FragmentTransaction#commit()}, no entanto, voc pode querer chamar {@link
    422 android.app.FragmentTransaction#addToBackStack addToBackStack()} para adicionar a operao
    423 a uma pilha de retorno de operaes de fragmentos. A pilha de retorno  gerenciada pela atividade
    424 e permite que o usurio retorne ao estado anterior do fragmento, ao pressionar o boto <em>Voltar</em>.</p>
    425 
    426 <p>Por exemplo, a seguir  apresentado o modo de substituir um fragmento por outro e preservar
    427 o estado anterior da pilha de retorno:</p>
    428 
    429 <pre>
    430 // Create new fragment and transaction
    431 Fragment newFragment = new ExampleFragment();
    432 FragmentTransaction transaction = getFragmentManager().beginTransaction();
    433 
    434 // Replace whatever is in the fragment_container view with this fragment,
    435 // and add the transaction to the back stack
    436 transaction.replace(R.id.fragment_container, newFragment);
    437 transaction.addToBackStack(null);
    438 
    439 // Commit the transaction
    440 transaction.commit();
    441 </pre>
    442 
    443 <p>Neste exemplo, {@code newFragment} substitui qualquer fragmento (se houver) que estiver
    444 no recipiente do layout identificado pelo ID {@code R.id.fragment_container}. Ao chamar {@link
    445 android.app.FragmentTransaction#addToBackStack addToBackStack()}, a operao de substituio
    446  salva na pilha de retorno para que o usurio possa reverter a operao
    447 e voltar ao fragmento anterior pressionando o boto <em>Voltar</em>.</p>
    448 
    449 <p>Se voc adicionar vrias alteraes  operao (como outro {@link
    450 android.app.FragmentTransaction#add add()} ou {@link android.app.FragmentTransaction#remove
    451 remove()}) e chamar {@link
    452 android.app.FragmentTransaction#addToBackStack addToBackStack()}, todas as alteraes aplicadas
    453 antes de chamar {@link android.app.FragmentTransaction#commit commit()} sero adicionadas
    454  pilha de retorno como uma nica operao e o boto <em>Voltar</em> reverter todas elas juntas.</p>
    455 
    456 <p>A ordem em que voc adicionar as alteraes em {@link android.app.FragmentTransaction} no importa,
    457 exceto que:</p>
    458 <ul>
    459   <li>Voc deve chamar {@link android.app.FragmentTransaction#commit()} por ltimo</li>
    460   <li>Caso esteja adicionando vrios fragmentos ao mesmo recipiente, a ordem em que
    461 adicion-los determina a ordem em que eles aparecero na hierarquia de vistas</li>
    462 </ul>
    463 
    464 <p>Caso voc no chame {@link android.app.FragmentTransaction#addToBackStack(String)
    465 addToBackStack()} ao realizar uma operao que remove um fragmento, este fragmento
    466 ser destrudo quando a operao for realizada e o usurio no poder navegar de volta a ele. Considerando que,
    467 se voc no chamar {@link android.app.FragmentTransaction#addToBackStack(String) addToBackStack()}
    468 ao remover um fragmento, o fragmento ser <em>interrompido</em> e ser retomado se o usurio
    469 navegar de volta.</p>
    470 
    471 <p class="note"><strong>Dica:</strong> para cada operao de fragmento,  possvel aplicar uma animao
    472 de transio, chamando {@link android.app.FragmentTransaction#setTransition setTransition()}
    473 antes da realizao.</p>
    474 
    475 <p>Chamar {@link android.app.FragmentTransaction#commit()} no realiza a operao
    476 imediatamente. Em vez disso, o parmetro agenda a execuo no encadeamento da IU da atividade (o encadeamento main, ou principal)
    477 assim que possvel. Se necessrio, no entanto,  possvel chamar {@link
    478 android.app.FragmentManager#executePendingTransactions()} a partir do encadeamento da IU para executar imediatamente
    479 as operaes enviadas por {@link android.app.FragmentTransaction#commit()}. Tal medida, geralmente,
    480 no  necessria, a no ser que a operao represente uma dependncia para trabalhos em outros encadeamentos.</p>
    481 
    482 <p class="caution"><strong>Ateno:</strong>  possvel realizar uma operao usando {@link
    483 android.app.FragmentTransaction#commit commit()} somente antes da atividade <a href="{@docRoot}guide/components/activities.html#SavingActivityState">salvar
    484 seu estado</a> (quando o usurio deixa a atividade). Caso tente efetivas as alteraes aps este ponto,
    485 uma exceo ser lanada. Isto acontece porque o estado aps a efetivao pode ser perdido se a atividade
    486 precisar ser restaurada. Para situaes em que no haja problema em perder a efetivao, use {@link
    487 android.app.FragmentTransaction#commitAllowingStateLoss()}.</p>
    488 
    489 
    490 
    491 
    492 <h2 id="CommunicatingWithActivity">Comunicao com a atividade</h2>
    493 
    494 <p>Apesar de {@link android.app.Fragment} ser implementado como um objeto independente
    495 de uma {@link android.app.Activity} e poder ser usado dentro de vrias atividades, uma dada instncia
    496 de um fragmento  diretamente vinculada  atividade que o contm.</p>
    497 
    498 <p>Especificamente, o fragmento pode acessar a instncia {@link android.app.Activity} com {@link
    499 android.app.Fragment#getActivity()} e realizar facilmente tarefas como encontrar uma vista
    500 no layout da atividade:</p>
    501 
    502 <pre>
    503 View listView = {@link android.app.Fragment#getActivity()}.{@link android.app.Activity#findViewById findViewById}(R.id.list);
    504 </pre>
    505 
    506 <p>Do mesmo modo, a atividade pode chamar mtodos no fragmento adquirindo uma referncia
    507 para o {@link android.app.Fragment} a partir do {@link android.app.FragmentManager} usando {@link
    508 android.app.FragmentManager#findFragmentById findFragmentById()} ou {@link
    509 android.app.FragmentManager#findFragmentByTag findFragmentByTag()}. Por exemplo:</p>
    510 
    511 <pre>
    512 ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
    513 </pre>
    514 
    515 
    516 <h3 id="EventCallbacks">Criao de retornos de chamada de evento para a atividade</h3>
    517 
    518 <p>Em alguns casos, um fragmento que compartilhe eventos com a atividade pode ser necessrio. Uma boa maneira de fazer isto
    519  definir uma interface de retorno de chamada dentro do fragmento e solicitar que a atividade do host
    520 implemente-a. Quando a atividade recebe um retorno de chamada por meio da interface, ela pode compartilhar as informaes
    521 com outros fragmentos no layout conforme necessrio.</p>
    522 
    523 <p>Por exemplo, se um aplicativo de notcias em uma atividade tiver dois fragmentos &mdash; um para exibir uma lista
    524 de artigos (fragmento A) e outro para exibir um artigo (fragmento B) &mdash; ento o fragmento A
    525 deve informar  atividade quando um item de lista  selecionado para que ela possa instruir o fragmento B a exibir o artigo. Neste caso,
    526  a interface {@code OnArticleSelectedListener}  declarada dentro do fragmento A:</p>
    527 
    528 <pre>
    529 public static class FragmentA extends ListFragment {
    530     ...
    531     // Container Activity must implement this interface
    532     public interface OnArticleSelectedListener {
    533         public void onArticleSelected(Uri articleUri);
    534     }
    535     ...
    536 }
    537 </pre>
    538 
    539 <p>Portanto, a atividade que hospeda o fragmento implementa a interface {@code OnArticleSelectedListener}
    540 e suspende
    541 {@code onArticleSelected()} para notificar o fragmento B do evento do fragmento A. Para garantir
    542 que a atividade do host implemente esta interface, o mtodo de retorno de chamada de {@link
    543 android.app.Fragment#onAttach onAttach()} do fragmento A (que o sistema chama ao adicionar
    544 o fragmento  atividade) instanciar {@code OnArticleSelectedListener}
    545 lanando a {@link android.app.Activity}, que  passada para {@link android.app.Fragment#onAttach
    546 onAttach()}:</p>
    547 
    548 <pre>
    549 public static class FragmentA extends ListFragment {
    550     OnArticleSelectedListener mListener;
    551     ...
    552     &#64;Override
    553     public void onAttach(Activity activity) {
    554         super.onAttach(activity);
    555         try {
    556             mListener = (OnArticleSelectedListener) activity;
    557         } catch (ClassCastException e) {
    558             throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");
    559         }
    560     }
    561     ...
    562 }
    563 </pre>
    564 
    565 <p>Se a atividade no implementar a interface, o fragmento lanar
    566 {@link java.lang.ClassCastException}.
    567 Se for bem-sucedida, o membro {@code mListener} reter uma referncia da implementao da atividade
    568 de {@code OnArticleSelectedListener}, para que o fragmento A possa compartilhar os eventos com a atividade
    569 chamando mtodos definidos pela interface {@code OnArticleSelectedListener}. Por exemplo, se o fragmento A
    570 for uma extenso de {@link android.app.ListFragment}, sempre
    571 que o usurio clicar em um item de lista, o sistema chamar {@link android.app.ListFragment#onListItemClick
    572 onListItemClick()} no fragmento que, em seguida, chamar {@code onArticleSelected()} para compartilhar
    573 o evento com a atividade:</p>
    574 
    575 <pre>
    576 public static class FragmentA extends ListFragment {
    577     OnArticleSelectedListener mListener;
    578     ...
    579     &#64;Override
    580     public void onListItemClick(ListView l, View v, int position, long id) {
    581         // Append the clicked item's row ID with the content provider Uri
    582         Uri noteUri = ContentUris.{@link android.content.ContentUris#withAppendedId withAppendedId}(ArticleColumns.CONTENT_URI, id);
    583         // Send the event and Uri to the host activity
    584         mListener.onArticleSelected(noteUri);
    585     }
    586     ...
    587 }
    588 </pre>
    589 
    590 <p>O parmetro {@code id} passado para {@link
    591 android.app.ListFragment#onListItemClick onListItemClick()}  o ID da linha do item clicado
    592 que a atividade (ou outro fragmento) usa para resgatar o artigo do {@link
    593 android.content.ContentProvider} do aplicativo.</p>
    594 
    595 <p><!--To see a complete implementation of this kind of callback interface, see the <a
    596 href="{@docRoot}resources/samples/NotePad/index.html">NotePad sample</a>. -->Mais informaes sobre
    597 como usar o provedor de contedo esto disponveis na documentao <a href="{@docRoot}guide/topics/providers/content-providers.html">Provedores de contedo</a>.</p>
    598 
    599 
    600 
    601 <h3 id="ActionBar">Adio de itens  barra de ao</h3>
    602 
    603 <p>Os fragmentos podem contribuir com itens de menu para o <a href="{@docRoot}guide/topics/ui/menus.html#options-menu">menu de opes</a> da atividade (e, consequentemente, para a <a href="{@docRoot}guide/topics/ui/actionbar.html">barra de ao</a>) implementando 
    604 {@link android.app.Fragment#onCreateOptionsMenu(Menu,MenuInflater) onCreateOptionsMenu()}. Para que este mtodo
    605 receba chamadas, no entanto, voc deve chamar {@link
    606 android.app.Fragment#setHasOptionsMenu(boolean) setHasOptionsMenu()} durante {@link
    607 android.app.Fragment#onCreate(Bundle) onCreate()} para indicar que o fragmento
    608 gostaria de adicionar itens ao menu de opes (caso contrrio, o fragmento no receber uma chamada
    609 para {@link android.app.Fragment#onCreateOptionsMenu onCreateOptionsMenu()}).</p>
    610 
    611 <p>Quaisquer itens adicionados ao menu de opes do fragmento so anexados
    612 aos itens de menu existentes. O fragmento tambm recebe retornos de chamada para {@link
    613 android.app.Fragment#onOptionsItemSelected(MenuItem) onOptionsItemSelected()} quando um item de menu
    614  selecionado.</p>
    615 
    616 <p>Tambm  possvel registrar uma vista no layout do fragmento para fornecer um menu de contexto chamando {@link
    617 android.app.Fragment#registerForContextMenu(View) registerForContextMenu()}. Quando o usurio
    618 abre o menu de contexto, o fragmento recebe uma chamada de {@link
    619 android.app.Fragment#onCreateContextMenu(ContextMenu,View,ContextMenu.ContextMenuInfo)
    620 onCreateContextMenu()}. Quando o usurio seleciona um item, o fragmento recebe uma chamada de {@link
    621 android.app.Fragment#onContextItemSelected(MenuItem) onContextItemSelected()}.</p>
    622 
    623 <p class="note"><strong>Observao:</strong> apesar de o fragmento receber um retorno de chamada selecionado no item
    624 para cada item de menu que adiciona, a atividade  a primeira a receber o respectivo retorno de chamada quando o usurio
    625 seleciona um item de menu. Se a implementao da atividade do retorno de chamada selecionado no item no
    626 lida com o item selecionado, o evento  passado para o retorno de chamada do fragmento. Isto  verdadeiro
    627 para o menu de opes e os menus de contexto.</p>
    628 
    629 <p>Para obter mais informaes sobre menus, consulte os guias do desenvolvedor <a href="{@docRoot}guide/topics/ui/menus.html">Menus</a> e <a href="{@docRoot}guide/topics/ui/actionbar.html">Barra de ao</a>.</p>
    630 
    631 
    632 
    633 
    634 <h2 id="Lifecycle">Tratamento do ciclo de vida dos fragmentos</h2>
    635 
    636 <div class="figure" style="width:350px">
    637 <img src="{@docRoot}images/activity_fragment_lifecycle.png" alt="" />
    638 <p class="img-caption"><strong>Figura 3.</strong> O efeito do ciclo de vida da atividade no ciclo de vida
    639 do fragmento.</p>
    640 </div>
    641 
    642 <p>Gerenciar o ciclo de vida de um fragmento  muito parecido com gerenciar o ciclo de vida de uma atividade. Como uma atividade,
    643 um fragmento pode existir em trs estados:</p>
    644 
    645 <dl>
    646   <dt><i>Retomado</i></dt>
    647     <dd>O fragmento  visvel na atividade em execuo.</dd>
    648 
    649   <dt><i>Pausado</i></dt>
    650     <dd>Outra atividade est em primeiro plano, mas a atividade em que este fragmento
    651 vive ainda est visvel (a atividade de primeiro plano  parcialmente transparente
    652 ou no cobre a tela inteira).</dd>
    653 
    654   <dt><i>Interrompido</i></dt>
    655     <dd>O fragmento no  visvel. A atividade do host foi interrompida
    656 ou o fragmento foi removido da atividade mas adicionado  pilha de retorno. Um fragmento interrompido
    657 ainda est vivo (todas as informaes do membro e de estado esto retidas no sistema). No entanto,
    658 no est mais visvel e ser eliminado se a atividade tambm for.</dd>
    659 </dl>
    660 
    661 <p>Alm disso, como uma atividade,  possvel reter o estado de um fragmento usando um {@link
    662 android.os.Bundle}, caso o processo da atividade seja eliminado e voc precise restaurar
    663 o estado do fragmento quando a atividade for recriada.  possvel salvar o estado durante o retorno de chamada {@link
    664 android.app.Fragment#onSaveInstanceState onSaveInstanceState()} do fragmento e restaur-lo
    665 durante {@link android.app.Fragment#onCreate onCreate()}, {@link
    666 android.app.Fragment#onCreateView onCreateView()} ou {@link
    667 android.app.Fragment#onActivityCreated onActivityCreated()}. Para obter mais informaes sobre
    668 como salvar o estado, consulte a documentao <a href="{@docRoot}guide/components/activities.html#SavingActivityState">Atividades</a>
    669 .</p>
    670 
    671 <p>A diferena mais significante entre o ciclo de vida de uma atividade e de um fragmento
    672  o armazenamento em suas respectivas pilhas de retorno. Por padro, uma atividade  colocada de volta na pilha de retorno de atividades,
    673 que  gerenciada pelo sistema, quando interrompida (para que o usurio possa navegar
    674 a ela com o boto <em>Voltar</em>, como discutido em <a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tarefas e pilha de retorno</a>).
    675 No entanto, um fragmento  posicionado em uma pilha de retorno gerenciada pela atividade do host somente
    676 ao solicitar explicitamente que a instncia seja salva chamando {@link
    677 android.app.FragmentTransaction#addToBackStack(String) addToBackStack()} durante uma operao
    678 que remove o fragmento.</p>
    679 
    680 <p>Caso contrrio, gerenciar o ciclo de vida do fragmento  muito semelhante a gerenciar
    681 o ciclo de vida da atividade. Portanto, as mesmas prticas para <a href="{@docRoot}guide/components/activities.html#Lifecycle">gerenciar o ciclo de vida
    682 da atividade</a> aplicam-se aos fragmentos. O que voc tambm precisa entender, no entanto,  como a vida
    683 da atividade afeta a vida do fragmento.</p>
    684 
    685 <p class="caution"><strong>Ateno:</strong> caso precise de um objeto {@link android.content.Context}
    686 dentro do {@link android.app.Fragment},  possvel chamar {@link android.app.Fragment#getActivity()}.
    687 No entanto, tome cuidado para chamar {@link android.app.Fragment#getActivity()} somente quando o fragmento
    688 estiver anexado a uma atividade. Quando o fragmento ainda no estiver anexado, ou tiver sido desvinculado durante o fim
    689 do seu ciclo de vida, {@link android.app.Fragment#getActivity()} retornar como nulo.</p>
    690 
    691 
    692 <h3 id="CoordinatingWithActivity">Coordenao do ciclo de vida da atividade</h3>
    693 
    694 <p>O ciclo de vida da atividade em que o fragmento vive afeta diretamente o ciclo de vida
    695 do fragmento, da mesma forma que um retorno de chamada de cada ciclo de vida da atividade resulta em um retorno de chamada semelhante
    696 de cada fragmento. Por exemplo, quando a atividade receber {@link android.app.Activity#onPause},
    697 cada fragmento na atividade receber {@link android.app.Fragment#onPause}.</p>
    698 
    699 <p>Os fragmentos tm alguns retornos de chamada do ciclo de vida extras. No entanto, isto trata da interao nica
    700 com a atividade para realizar aes como compilar e destruir a IU do fragmento. Esses
    701 mtodos adicionais de retorno de chamada so:</p>
    702 
    703 <dl>
    704   <dt>{@link android.app.Fragment#onAttach onAttach()}</dt>
    705     <dd>Chamado quando o fragmento tiver sido associado  atividade ({@link
    706 android.app.Activity}  passado aqui).</dd>
    707   <dt>{@link android.app.Fragment#onCreateView onCreateView()}</dt>
    708     <dd>Chamado para criar a hierarquia de vistas associada ao fragmento.</dd>
    709   <dt>{@link android.app.Fragment#onActivityCreated onActivityCreated()}</dt>
    710     <dd>Chamado quando o mtodo {@link android.app.Activity#onCreate
    711 onCreate()} da atividade tiver retornado.</dd>
    712   <dt>{@link android.app.Fragment#onDestroyView onDestroyView()}</dt>
    713     <dd>Chamado quando a hierarquia de vistas associada ao fragmento estiver sendo removida.</dd>
    714   <dt>{@link android.app.Fragment#onDetach onDetach()}</dt>
    715     <dd>Chamado quando o fragmento estiver sendo desassociado da atividade.</dd>
    716 </dl>
    717 
    718 <p>O fluxo do ciclo de vida do fragmento, afetado pela atividade do host, como ilustrado
    719 pela figura 3. Nesta figura,  possvel ver como cada estado sucessivo da atividade determina
    720 qual mtodo de retorno de chamada um fragmento pode receber. Por exemplo, quando a atividade recebe o retorno de chamada {@link
    721 android.app.Activity#onCreate onCreate()}, um fragmento na atividade recebe nada mais
    722 do que o retorno de chamada {@link android.app.Fragment#onActivityCreated onActivityCreated()}.</p>
    723 
    724 <p>Quando a atividade atinge o estado retomado,  possvel adicionar e remover fragmentos
    725 dela livremente. Portanto, somente quando a atividade estiver no estado retomado, o ciclo de vida
    726 de um fragmento poder alterar-se de forma independente.</p>
    727 
    728 <p>No entanto, quando a atividade deixa o estado retomado, o fragmento  novamente forado
    729 a passar pelo ciclo de vida pela atividade.</p>
    730 
    731 
    732 
    733 
    734 <h2 id="Example">Exemplo</h2>
    735 
    736 <p>Para juntar tudo que foi discutido neste documento, abaixo h um exemplo de uma atividade
    737 que usa dois fragmentos para criar um layout de dois painis. A atividade abaixo inclui um fragmento
    738 para exibir uma lista de ttulos de peas de Shakespeare e outra para exibir um resumo da pea,
    739 quando selecionada na lista. Ela tambm determina como fornecer diferentes configuraes de fragmentos,
    740 com base na configurao da tela.</p>
    741 
    742 <p class="note"><strong>Observao:</strong> O cdigo fonte completo desta atividade est disponvel em
    743 <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.html">{@code
    744 FragmentLayout.java}</a>.</p>
    745 
    746 <p>A atividade principal aplica-se de maneira comum, durante {@link
    747 android.app.Activity#onCreate onCreate()}:</p>
    748 
    749 {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java main}
    750 
    751 <p>O layout aplicado  {@code fragment_layout.xml}:</p>
    752 
    753 {@sample development/samples/ApiDemos/res/layout-land/fragment_layout.xml layout}
    754 
    755 <p>Usando este layout, o sistema instancia {@code TitlesFragment} (que lista os ttulos
    756 das peas) assim que a atividade carrega o layout, enquanto que {@link android.widget.FrameLayout}
    757 (onde o fragmento para exibir o resumo da pea aparecer) consome o espao do lado direito da tela,
    758  mas primeiramente permanece vazio. Como ver abaixo, ele no estar visvel at que o usurio selecione um item
    759 na lista em que um fragmento esteja posicionado no {@link android.widget.FrameLayout}.</p>
    760 
    761 <p>No entanto, nem todas as configuraes de tela so grandes o suficiente para exibir a lista
    762 de peas e o resumo, lado a lado. Portanto, o layout acima  usado somente para configurao
    763 de tela de paisagem, salvando-o em {@code res/layout-land/fragment_layout.xml}.</p>
    764 
    765 <p>Por isso, quando a tela est na orientao de retrato, o sistema aplica o seguinte layout,
    766 que  salvo em {@code res/layout/fragment_layout.xml}:</p>
    767 
    768 {@sample development/samples/ApiDemos/res/layout/fragment_layout.xml layout}
    769 
    770 <p>Este layout inclui somente {@code TitlesFragment}. Isto significa que, quando o dispositivo
    771 est na orientao de retrato, somente a lista de ttulo das peas est disponvel. Portanto, quando o usurio clicar
    772 em um item da lista nesta configurao, o aplicativo iniciar uma nova atividade para exibir o resumo,
    773 em vez de carregar um segundo fragmento.</p>
    774 
    775 <p>A seguir,  possvel ver como isto  realizado com classes de fragmento. Primeiro, {@code
    776 TitlesFragment}, que exibe a lista de peas de Shakespeare. Este fragmento estende {@link
    777 android.app.ListFragment} e confia nele para lidar com grande parte do trabalho da vista de lista.</p>
    778 
    779 <p>Enquanto inspeciona este cdigo, observe que h dois possveis comportamentos quando um usurio
    780 clica em um item de lista: dependendo de qual dos dois layouts est ativo, ele pode criar e exibir
    781 um novo fragmento para exibir os detalhes na mesma atividade (adicionando o fragmento {@link
    782 android.widget.FrameLayout}), ou iniciar uma nova atividade (onde o fragmento possa ser exibido).</p>
    783 
    784 {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java titles}
    785 
    786 <p>O segundo fragmento, {@code DetailsFragment}, exibe o resumo da pea para o item selecionado
    787 na lista de {@code TitlesFragment}:</p>
    788  
    789 {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details}
    790 
    791 <p>Uma nova chamada da classe {@code TitlesFragment}, ou seja, se o usurio clicar em um item de lista
    792 e o layout original <em>no</em> incluir a vista {@code R.id.details} (a que
    793 {@code DetailsFragment} pertence), o aplicativo iniciar a atividade {@code DetailsActivity}
    794 para exibir o contedo do item.</p>
    795 
    796 <p>A seguir h {@code DetailsActivity}, que simplesmente embute {@code DetailsFragment} para exibir
    797 o resumo da pea selecionada quando a tela est na orientao de retrato:</p>
    798 
    799 {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java
    800 details_activity}
    801  
    802 <p>Observe que esta atividade finaliza-se se a configurao for de paisagem,
    803 pois a atividade principal pode tomar o controle e exibir {@code DetailsFragment} juntamente com {@code TitlesFragment}.
    804 Isto pode acontecer se o usurio iniciar {@code DetailsActivity} enquanto estiver na orientao de retrato,
    805 mas alternar para orientao de paisagem (o que reinicia a atividade atual).</p>
    806 
    807 
    808 <p>Para obter mais exemplos do uso de fragmentos (e arquivos fonte completos deste exemplo),
    809 consulte o aplicativo de exemplo API Demos disponvel em <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment">
    810 ApiDemos</a> (disponvel para download em <a href="{@docRoot}resources/samples/get.html">Exemplos de componentes do SDK</a>).</p>
    811 
    812 
    813