A passagem de dados entre "atividades" ou "fragmentos" é um dos conceitos básicos que você precisa aprender quando começar a fazer o desenvolvimento do andróide. Mesmo que "atividades" e "fragmentos" não sejam nada além de aulas, eles são considerados aulas especiais em andróide, já que são fundamentais para como funciona a interface do usuário andróide. Assim, não apenas passamos os dados através de construtores, mas em uma das três seguintes maneiras:

  1. `Intent'.
  2. Bundle.
  3. ViewModel

Analisaremos tudo isso usando exemplos práticos nesta lição. Vamos começar.

Exemplo 1: Passagem de dados Android - Fragmento para Atividade Via `Intent'.

Vamos continuar com nossas séries de passagem de dados andróides que tínhamos iniciado anteriormente. Tínhamos estudado como passar dados de "atividade" para "fragmento" e como passar tanto uma lista/objeto de "atividade" para "atividade", quanto simples tipos de dados primitivos.

Hoje, analisamos como passar dados simples do "fragmento" para a "atividade".

O que é um Fragmento?

Um fragmento é uma subatividade com seu próprio ciclo de vida. Os fragmentos são hospedados pelas atividades. Um atividade pode hospedar múltiplos fragmentos.

Por que passar dados do Fragmento para a atividade?

Não. Motivo
1. Fragmentos são subatividades e nos permitem ter telas diferentes sem necessariamente ter que criar muitas atividades. Portanto, precisamos saber como passar os dados do fragmento para uma atividade.
2. Fragmentos como Atividades são classes especiais de IU representando uma janela e, portanto, não podemos passar dados diretamente como fazemos com as classes comuns.

Introdução

  • Temos duas classes : uma nossa "atividade principal" e outra classe "meu fragmento".
  • Quando pressionamos o botão FAB (Floating Action Button), abrimos o MyFragment via Transaction, anexando-o a um FrameLayout que iremos definir.
  • O Fragmento contém um texto de edição e um spinner.
  • O usuário digita o nome da nave espacial e escolhe o ano de lançamento na fiação.
  • Em seguida, passamos estes dois dados de volta à MainActivity.
  • Em seguida, exibimos os dados recebidos em visualizações de texto.
  • Usamos o Android Studio como nossa IDE.
  • O código é bem comentado para facilitar a compreensão.

Perguntas comuns que respondemos

Com este simples exemplo, exploramos o seguinte :

  • Como passar dados do fragmento para uma atividade.
  • Como passar dados entre o fragmento e a atividade utilizando intentos.
  • Como faço para realizar a FragmentTransaction.
  • Substituir em Retomar() e receber dados em andróide.
  • Como trabalhar tanto com o fragmento quanto com a atividade.

Ferramentas utilizadas

  • IDE : Estúdio Android
  • OS : Windows 8.1
  • PLATFORM : Android
  • LÍNGUA : Java
  • TOPIC : Intent',Passagem de dados,Fragmento'.

Vamos lá.

Vamos dar uma olhada no código fonte.

1. 'Build.gradle'.

  • Não são necessárias dependências externas.

2. MainActivity.java

  • Nosso "Atividade principal", lançador Atividade.
  • Primeiro referimos aqui as visualizações, neste caso simples visualizações de texto para exibir nossos dados recebidos.
  • Temos um método: receberData() que é responsável por receber e desembalar os dados que recebemos da classe MeuFragmento.
  • Estaremos recebendo os dados no método onResume().
  • Como os métodos são chamados não somente quando retomamos do fragmento mas também depois que a atividade for criada e iniciada, precisaremos identificar o chamador utilizando uma simples string do Remetente que enviaremos toda vez que enviarmos dados do fragmento.
  • Se o remetente for 'Meu fragmento', então vamos em frente e desembalamos nossos dados.

package com.tutorials.hp.datafragment_activity;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private TextView nameTxt,yearTxt;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

    //REFERENCE VIEWS
        nameTxt= (TextView) findViewById(R.id.nameTxt);
        yearTxt= (TextView) findViewById(R.id.yearTxt);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
              openFragment();
            }
        });
    }
/*
WHEN ACTIVITY RESUMES
*/
    @Override
    protected void onResume() {
        super.onResume();

    //DETERMINE WHO STARTED THIS ACTIVITY
    final String sender=this.getIntent().getExtras().getString("SENDER_KEY");

    //IF ITS THE FRAGMENT THEN RECEIVE DATA
        if(sender != null)
        {
            this.receiveData();
            Toast.makeText(this, "Received", Toast.LENGTH_SHORT).show();

        }
    }

    /*
        OPEN FRAGMENT
         */
    private void openFragment()
    {
        //PASS OVER THE BUNDLE TO OUR FRAGMENT
        MyFragment myFragment = new MyFragment();
        //THEN NOW SHOW OUR FRAGMENT
        getSupportFragmentManager().beginTransaction().replace(R.id.container,myFragment).commit();
    }

    /*
    RECEIVE DATA FROM FRAGMENT
     */
    private void receiveData()
    {
        //RECEIVE DATA VIA INTENT
        Intent i = getIntent();
        String name = i.getStringExtra("NAME_KEY");
        int year = i.getIntExtra("YEAR_KEY",0);

        //SET DATA TO TEXTVIEWS
        nameTxt.setText(name);
        yearTxt.setText(String.valueOf(year));
    }
}

3. MeuFragmento.java

  • Nossa classe Fragmento.
  • Estamos utilizando a biblioteca de suporte Fragmento por isso estendemos android.support.v4.app.Fragmento``.
  • Aqui temos um texto de edição, um botão e um spinner.
  • O usuário deve digitar o nome da nave espacial em edittext,selecione o ano de lançamento no spinner e clique no botão enviar para enviar esses dados para MainActivity.
  • Enviamos e empacotamos os dados em um intent.
  • Enviamos também uma variável que chamamos remetente para identificar o remetente desses dados como este fragmento.

package com.tutorials.hp.datafragment_activity;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;

/
 * A simple Fragment subclass.
 */
public class MyFragment extends Fragment {

    private EditText nameFragTxt;
    private Spinner launchYearSpinner;
    private Button sendBtn;

    public MyFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        // Inflate the layout for this fragment
        View rootView=inflater.inflate(R.layout.fragment_my, container, false);

        //INITIALIZE VIEWS
        nameFragTxt = (EditText)rootView.findViewById(R.id.nameEditTxt);
        launchYearSpinner = (Spinner)rootView.findViewById(R.id.sp);
        sendBtn = (Button) rootView.findViewById(R.id.sendBtn);

        fillYears();

        sendBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                sendData();
            }
        });

        return rootView;
    }
    /*
    FILL YEARS IN OUR SPINNER
    */
    private void fillYears() {
        ArrayAdapter adapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1);
        adapter.add("2017");
        adapter.add("2018");
        adapter.add("2019");
        adapter.add("2020");
        adapter.add("2021");
        adapter.add("2022");

        //SET ADAPTER INSTANCE TO OUR SPINNER
        launchYearSpinner.setAdapter(adapter);

    }

    private void sendData()
    {
        //INTENT OBJ
        Intent i = new Intent(getActivity().getBaseContext(),
                MainActivity.class);

        //PACK DATA
    i.putExtra("SENDER_KEY", "MyFragment");
        i.putExtra("NAME_KEY", nameFragTxt.getText().toString());
        i.putExtra("YEAR_KEY", Integer.valueOf(launchYearSpinner.getSelectedItem().toString()));

        //RESET WIDGETS
        nameFragTxt.setText("");
        launchYearSpinner.setSelection(0);

        //START ACTIVITY
        getActivity().startActivity(i);
    }
}

4. Criar interfaces de usuário

As interfaces de usuário são normalmente criadas em andróides usando layouts XML, em oposição à codificação direta em java.

Este é um exemplo de programação declarativa.

Vantagens do uso de XML sobre Java
Não. Vantagem
1. Criação declarativa de widgets e views nos permite usar uma linguagem declarativa XML que torna mais fácil.
2. É de fácil manutenção, pois a interface do usuário é dissociada de sua lógica Java.
3. É mais fácil compartilhar ou baixar o código e testá-los com segurança antes do tempo de execução.
4. Você pode usar ferramentas geradas em XML para gerar XML

Aqui estão nossos layouts para este projeto:

(a). activity_main.xml
  • Este layout é inflado para a interface do usuário MainActivity.
  • Ele inclui o content_main.xml.

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_fitsSystemWindows="true"
    tools_context="com.tutorials.hp.datafragment_activity.MainActivity">

    <android.support.design.widget.AppBarLayout
        android_layout_width="match_parent"
        android_layout_height="wrap_content"
        android_theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android_id="@+id/toolbar"
            android_layout_width="match_parent"
            android_layout_height="?attr/actionBarSize"
            android_background="?attr/colorPrimary"
            app_popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_main" />

    <android.support.design.widget.FloatingActionButton
        android_id="@+id/fab"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_gravity="bottom|end"
        android_layout_margin="@dimen/fab_margin"
        app_srcCompat="@android:drawable/ic_dialog_email" />

</android.support.design.widget.CoordinatorLayout>

Aqui estão alguns dos widgets, visões e grupos de visão que se empregam".

Não. View/ViewGroup Pacote Role
1. CordinatorLayout android.support.design.widget Super-powered framelayout que fornece a decoração de alto nível de nossa aplicação e também especifica interações e comportamentos de todas as suas crianças.
2. AppBarLayout android.support.design.widget Uma criança LinearLayout que organiza suas crianças verticalmente e fornece conceitos de barra de aplicação de design material como gestos de rolagem.
3. ToolBar <android.support.v7.widget Um ViewGroup que pode fornecer recursos de barra de ação, mas que ainda pode ser utilizado dentro de layouts de aplicação.
4. FloatingActionButton android.support.design.widget Uma visão circular da imagem flutuando acima da IU que podemos utilizar como botões.
(b). content_main.xml

Este layout é incluído em sua atividade_main.xml.
Definimos aqui nossos widgets UI.

  • Layout principal.
  • Especificamos aqui os Views e widgets xml code.
  • Este layout deve ser inflado em nossa interface MainActivity.
  • É o layout do contentmain.xml em nosso projeto.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout

    android_id="@+id/content_main"
    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_paddingBottom="@dimen/activity_vertical_margin"
    android_paddingLeft="@dimen/activity_horizontal_margin"
    android_paddingRight="@dimen/activity_horizontal_margin"
    android_paddingTop="@dimen/activity_vertical_margin"
    app_layout_behavior="@string/appbar_scrolling_view_behavior"
    tools_context="com.tutorials.hp.datafragment_activity.MainActivity"
    tools_showIn="@layout/activity_main">

    <LinearLayout
        android_layout_width="match_parent"
        android_orientation="vertical"
        android_layout_height="match_parent">

    <TextView
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_textAppearance="?android:attr/textAppearanceLarge"
        android_text="Received Data"
        android_id="@+id/activityTitle"
        android_textStyle="bold"
        android_textColor="@color/colorAccent"
        android_layout_gravity="center_horizontal"
        android_padding="5dp"
        />

    <TextView
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_textAppearance="?android:attr/textAppearanceLarge"
        android_text="Name"
        android_id="@+id/nameTxt"
        android_padding="5dp"
        />

    <TextView
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_textAppearance="?android:attr/textAppearanceLarge"
        android_text="Year"
        android_id="@+id/yearTxt"
        android_padding="5dp"
        />

    <FrameLayout
        android_id="@+id/container"
        android_layout_width="match_parent"
        android_layout_height="wrap_content">

    </FrameLayout>

    </LinearLayout>
</RelativeLayout>

(c). Layout do MyFragment

  • Layout para nossa classe Fragmento.
  • Contém um CardView com um texto de edição e um spinner.
  • É o layout do fragmento_my.xml em nosso projeto

<FrameLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    tools_context="com.tutorials.hp.datafragment_activity.MyFragment">
    <android.support.v7.widget.CardView
        android_orientation="horizontal"
        android_layout_width="match_parent"

        android_layout_margin="5dp"
        card_view_cardCornerRadius="10dp"
        card_view_cardElevation="5dp"
        android_layout_height="300dp">

        <LinearLayout
            android_orientation="vertical"
            android_layout_width="match_parent"
            android_layout_height="match_parent">
            <TextView
                android_layout_width="wrap_content"
                android_layout_height="wrap_content"
                android_textAppearance="?android:attr/textAppearanceLarge"
                android_text="FRAGMENT ONE"
                android_id="@+id/fragTitle"
                android_textStyle="bold"
                android_textColor="@color/colorAccent"
                android_layout_gravity="center_horizontal"
                android_padding="5dp"
                />

            <android.support.design.widget.TextInputLayout
                android_id="@+id/nameLayout"
                android_layout_width="match_parent"
                android_layout_height="wrap_content">

                <EditText
                    android_id="@+id/nameEditTxt"
                    android_layout_width="match_parent"
                    android_layout_height="wrap_content"
                    android_singleLine="true"
                    android_hint= "Name" />
            </android.support.design.widget.TextInputLayout>

            <LinearLayout
                android_layout_width="match_parent"
                android_orientation="horizontal"
                android_layout_height="wrap_content">
                <TextView
                    android_text="LAUNCH YEAR : "
                    android_textColor="@color/colorAccent"
                    android_layout_width="wrap_content"
                    android_layout_height="wrap_content" />
                <Spinner
                    android_id="@+id/sp"
                    android_layout_width="match_parent"
                    android_layout_height="wrap_content"
                    />
            </LinearLayout>

            <Button
                android_id="@+id/sendBtn"
        android_text="Send"
                android_layout_width="wrap_content"
                android_layout_height="wrap_content"             />
        </LinearLayout>
    </android.support.v7.widget.CardView>
</FrameLayout>

Como Funcionar

  • Faça o download do projeto acima.
  • Você receberá um arquivo zipado, extraia-o.
  • Abra o Estúdio Android.
  • Agora feche, qualquer projeto já aberto
  • Na barra de menu clique em **Arquivo >Novo > Projeto de Importação***
  • Agora escolha uma pasta de destino, de onde você quer importar o projeto.
  • Escolha um projeto Android.
    Agora clique em "**OK***".
  • Feito, você já importou o projeto, agora edite-o.

Resultado

Aqui está o que você terá:

Como passar dados do "fragmento" para a "atividade"

Mais recursos

Recurso Link
GitHub Browse Browse Browse
GitHub Download Link Download Download

Exemplo 2: Passagem de dados Android - De "Atividade" para "Fragmento" via "Bundle".

Ao desenvolver qualquer aplicação que não seja um Hello World, é provável que você precise ter mais de uma Atividade ou Fragmentos.

A maioria dos novatos se confunde com a passagem de dados entre atividades ou entre fragmentos.

Hoje queremos ver como passar dados de uma atividade para um fragmento. Vamos utilizar um objeto "Bundle", embalar dados em nossa "Atividade", depois desempacotar esses dados dentro do método onCreateView() de nosso "Fragmento".

PASSO 1 : Criar Projeto

  1. Primeiro, criar um novo projeto no estúdio andróide. Ir para Arquivo --> Novo Projeto.
  2. Digite o nome do aplicativo e escolha o nome da empresa.
  3. Escolha o SDK mínimo.
  4. Escolher Vazio ou atividade Básica.
  5. Clique em Finish.

PASSO 2 : Nosso `Build.gradle'.

  • Estaremos utilizando um CardView em nosso `Fragmento'. Não são necessárias dependências externas.

PASSO 3 : Nosso `Fragmento'.

  • Será inflado a partir de nosso "fragmento" de layout.
  • Receberemos simplesmente os dados enviados pela MainActivity e os mostraremos em nossa visão dentro de nosso fragmento.
  • Desembrulhamos os dados em nosso método onCreateView().

package com.tutorials.hp.dataactivity_fragment;

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

public class MyFragment extends Fragment {

    private TextView nameFragTxt,yearFragTxt;

    public MyFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView=inflater.inflate(R.layout.fragment_my, container, false);

        nameFragTxt= (TextView) rootView.findViewById(R.id.nameTxt);
        yearFragTxt= (TextView) rootView.findViewById(R.id.yearTxt);

        //UNPACK OUR DATA FROM OUR BUNDLE
        String name=this.getArguments().getString("NAME_KEY").toString();
        int year=this.getArguments().getInt("YEAR_KEY");

       nameFragTxt.setText("NAME : "+name);
       yearFragTxt.setText("YEAR : "+String.valueOf(year));

        return rootView;
    }

}

PASSO 4 : Nossa PrincipalAtividade

  • Será inflado a partir de nosso conteúdomain.xml
  • Quando o usuário clica no Botão de Ação Flutuante, embalamos os dados digitados por usuário em texto de edição e spinner em um objeto Bundle.
  • Em seguida, realizamos nossa transação 'Fragmento', substituindo nosso recipiente Framelayout por nosso 'Fragmento' inflado.
  • Enviamos o pacote para o Fragmento.

package com.tutorials.hp.dataactivity_fragment;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;

public class MainActivity extends AppCompatActivity {
    private EditText nameTxt;
    private Spinner launchYearSpinner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        //INITIALIZE VIEWS
        nameTxt = (EditText) findViewById(R.id.nameEditTxt);
        launchYearSpinner = (Spinner) findViewById(R.id.sp);

        fillYears();

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                sendData();
            }
        });
    }

    /*
    SEND DATA TO FRAGMENT
     */
    private void sendData() {
        //PACK DATA IN A BUNDLE
        Bundle bundle = new Bundle();
        bundle.putString("NAME_KEY", nameTxt.getText().toString());
        bundle.putInt("YEAR_KEY", Integer.valueOf(launchYearSpinner.getSelectedItem().toString()));

        //PASS OVER THE BUNDLE TO OUR FRAGMENT
        MyFragment myFragment = new MyFragment();
        myFragment.setArguments(bundle);

        nameTxt.setText("");
        launchYearSpinner.setSelection(0);

        //THEN NOW SHOW OUR FRAGMENT
        getSupportFragmentManager().beginTransaction().replace(R.id.container,myFragment).commit();

    }

    /*
    FILL YEARS IN OUR SPINNER
     */
    private void fillYears() {
        ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1);
        adapter.add("2017");
        adapter.add("2018");
        adapter.add("2019");
        adapter.add("2020");
        adapter.add("2021");
        adapter.add("2022");

        //SET ADAPTER INSTANCE TO OUR SPINNER
        launchYearSpinner.setAdapter(adapter);
    }
}

PASSO 5. Criar Atividade Interface do usuário

As interfaces de usuário são normalmente criadas em andróides usando layouts XML, em oposição à codificação direta em java.

Este é um exemplo de programação declarativa.

**Vantagens do uso de XML sobre Java***.

Não. Vantagem
1. Criação declarativa de widgets e views nos permite usar uma linguagem declarativa XML que torna mais fácil.
2. É de fácil manutenção, pois a interface do usuário é dissociada de sua lógica Java.
3. É mais fácil compartilhar ou baixar o código e testá-los com segurança antes do tempo de execução.
4. Você pode usar ferramentas geradas em XML para gerar XML

Aqui estão nossos layouts para este projeto:

(a). activity_main.xml
  • Este layout é inflado para a interface do usuário MainActivity.
  • Ele inclui o content_main.xml.

Aqui estão alguns dos widgets, visualizações e grupos de visualização que são empregados".

Não. View/ViewGroup Pacote Role
1. CordinatorLayout android.support.design.widget Super-powered framelayout que fornece a decoração de alto nível de nossa aplicação e também especifica interações e comportamentos de todas as suas crianças.
2. AppBarLayout android.support.design.widget Uma criança LinearLayout que organiza suas crianças verticalmente e fornece conceitos de barra de aplicação de design material como gestos de rolagem.
3. ToolBar <android.support.v7.widget Um ViewGroup que pode fornecer recursos de barra de ação, mas que ainda pode ser utilizado dentro de layouts de aplicação.
4. FloatingActionButton android.support.design.widget Uma visão circular da imagem flutuando acima da IU que podemos utilizar como botões.
(b). content_main.xml

Este layout é incluído em sua atividade_main.xml.
Definimos aqui nossos widgets UI.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_paddingBottom="@dimen/activity_vertical_margin"
    android_paddingLeft="@dimen/activity_horizontal_margin"
    android_paddingRight="@dimen/activity_horizontal_margin"
    android_paddingTop="@dimen/activity_vertical_margin"
    app_layout_behavior="@string/appbar_scrolling_view_behavior"
    tools_context="com.tutorials.hp.dataactivity_fragment.MainActivity"
    tools_showIn="@layout/activity_main">

    <LinearLayout
        android_layout_width="match_parent"
        android_orientation="vertical"
        android_layout_height="match_parent">

        <android.support.design.widget.TextInputLayout
            android_id="@+id/nameLayout"
            android_layout_width="match_parent"
            android_layout_height="wrap_content">

            <EditText
                android_id="@+id/nameEditTxt"
                android_layout_width="match_parent"
                android_layout_height="wrap_content"
                android_singleLine="true"
                android_hint= "Name" />
        </android.support.design.widget.TextInputLayout>

    <LinearLayout
        android_layout_width="match_parent"
        android_orientation="horizontal"
        android_layout_height="wrap_content">
        <TextView
            android_text="LAUNCH YEAR : "
            android_textColor="@color/colorAccent"
            android_layout_width="wrap_content"
            android_layout_height="wrap_content" />
        <Spinner
            android_id="@+id/sp"
            android_layout_width="match_parent"
            android_layout_height="wrap_content"
            />
        </LinearLayout>
        <FrameLayout
            android_id="@+id/container"
            android_layout_width="match_parent"
            android_layout_height="wrap_content">
        </FrameLayout>
    </LinearLayout>
</RelativeLayout>

PASSO 6 : Nosso Fragmento xml

  • Nosso "fragmento" layout.
  • Deve conter um CardView com visualização de texto.

<RelativeLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    tools_context="com.tutorials.hp.dataactivity_fragment.MyFragment">

    <android.support.v7.widget.CardView
        android_orientation="horizontal"
        android_layout_width="match_parent"

        android_layout_margin="5dp"
        card_view_cardCornerRadius="10dp"
        card_view_cardElevation="5dp"
        android_layout_height="300dp">

        <LinearLayout
            android_orientation="vertical"
            android_layout_width="match_parent"
            android_layout_height="match_parent">

            <TextView
                android_layout_width="wrap_content"
                android_layout_height="wrap_content"
                android_textAppearance="?android:attr/textAppearanceLarge"
                android_text="FRAGMENT ONE"
                android_id="@+id/fragTitle"
                android_textStyle="bold"
                android_textColor="@color/colorAccent"
                android_layout_gravity="center_horizontal"
                android_padding="5dp"
                 />

            <TextView
                android_layout_width="wrap_content"
                android_layout_height="wrap_content"
                android_textAppearance="?android:attr/textAppearanceLarge"
                android_text="Name"
                android_id="@+id/nameTxt"
                android_padding="5dp"
                />

            <TextView
                android_layout_width="wrap_content"
                android_layout_height="wrap_content"
                android_textAppearance="?android:attr/textAppearanceLarge"
                android_text="Year"
                android_id="@+id/yearTxt"
                android_padding="5dp"
                />

        </LinearLayout>
    </android.support.v7.widget.CardView>

</RelativeLayout>

PASSO 7 : Como Funcionar

  • Faça o download do projeto.
  • Você receberá um arquivo zipado, extraia-o.
  • Abra o Estúdio Android.
  • Agora feche, qualquer projeto já aberto
  • Na barra de menu clique em **Arquivo >Novo > Projeto de Importação***
  • Agora escolha uma pasta de destino, de onde você quer importar o projeto.
  • Escolha um projeto Android.
    Agora clique em "**OK***".
  • Feito, agora edite-o...

Resultado

Aqui está o que você recebe:

Como passar dados de <code>Atividade</code> para <code>Fragmento</code>

PASSO 8 : Mais

Recurso Link
GitHub Browse Browse
GitHub Download Link Baixar

Passagem de dados do Android: ListView to ListView

Às vezes você pode querer passar dados de uma visualização de lista em Atividade A para ListView em, digamos, Atividade B. Bem, este é o propósito deste tutorial.

Teremos duas Atividades, cada uma com uma ListView. Clicamos em um botão e passamos os dados da primeira atividade para a segunda atividade, a primeira vista à esquerda para a segunda vista da lista.

Scripts de Gradle

Modifiquemos nosso nível de aplicação de arquivo `build.gradle'.

1. Build.gradle

  • Especificamos as dependências sob o fechamento das dependências.

    apply plugin: 'com.android.application'

    android {
        compileSdkVersion 25
        buildToolsVersion "25.0.2"
        defaultConfig {
            applicationId "com.tutorials.hp.listviewdatapassing"
            minSdkVersion 15
            targetSdkVersion 25
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:appcompat-v7:25.2.0'
        compile 'com.android.support:design:25.2.0'
        testCompile 'junit:junit:4.12'
    }

LAYOUTS

Teremos três layouts:

1. activity_main.xml

  • Este layout será inflado na IU para nossa principal atividade.
  • Ele manterá o layout content_main.xml.
  • Ele contém nossas definições de barra de aplicativos e barra de ferramentas.

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout

        android_layout_width="match_parent"
        android_layout_height="match_parent"
        android_fitsSystemWindows="true"
        tools_context="com.tutorials.hp.listviewdatapassing.MainActivity">

        <android.support.design.widget.AppBarLayout
            android_layout_width="match_parent"
            android_layout_height="wrap_content"
            android_theme="@style/AppTheme.AppBarOverlay">

            <android.support.v7.widget.Toolbar
                android_id="@+id/toolbar"
                android_layout_width="match_parent"
                android_layout_height="?attr/actionBarSize"
                android_background="?attr/colorPrimary"
                app_popupTheme="@style/AppTheme.PopupOverlay" />

        </android.support.design.widget.AppBarLayout>

        <include layout="@layout/content_main" />

        <android.support.design.widget.FloatingActionButton
            android_id="@+id/fab"
            android_layout_width="wrap_content"
            android_layout_height="wrap_content"
            android_layout_gravity="bottom|end"
            android_layout_margin="@dimen/fab_margin"
            app_srcCompat="@android:drawable/ic_dialog_email" />

    </android.support.design.widget.CoordinatorLayout>

2. content_main.xml

  • Isto conterá nossa primeira lista de visualização.
  • Este layout é incluído dentro do activity_main.xml.

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout

        android_id="@+id/content_main"
        android_layout_width="match_parent"
        android_layout_height="match_parent"
        android_paddingBottom="@dimen/activity_vertical_margin"
        android_paddingLeft="@dimen/activity_horizontal_margin"
        android_paddingRight="@dimen/activity_horizontal_margin"
        android_paddingTop="@dimen/activity_vertical_margin"
        app_layout_behavior="@string/appbar_scrolling_view_behavior"
        tools_context="com.tutorials.hp.listviewdatapassing.MainActivity"
        tools_showIn="@layout/activity_main">

        <ListView
            android_id="@+id/firstLV"
            android_layout_width="match_parent"
            android_layout_height="wrap_content" />
    </RelativeLayout>

3. activity_second.xml

  • Este layout será inflado na IU para nossa segunda `atividade'.
  • Ele manterá a segunda atividade.

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout

        android_id="@+id/activity_second"
        android_layout_width="match_parent"
        android_layout_height="match_parent"
        android_paddingBottom="@dimen/activity_vertical_margin"
        android_paddingLeft="@dimen/activity_horizontal_margin"
        android_paddingRight="@dimen/activity_horizontal_margin"
        android_paddingTop="@dimen/activity_vertical_margin"
        tools_context="com.tutorials.hp.listviewdatapassing.SecondActivity">
        <ListView
            android_id="@+id/secondLV"
            android_layout_width="match_parent"
            android_layout_height="wrap_content"
            />
    </RelativeLayout>

CLASSES JAVA

Aqui estão nossas aulas de java:

**1. EspaçonavesCollection***

  • Esta é uma classe que nos ajudará a transferir nossa ArrayList da primeira para a segunda atividade'. Esta classe será serializada, transferida e depois desserializada na segunda atividade`.

    package com.tutorials.hp.listviewdatapassing;

    import java.io.Serializable;
    import java.util.ArrayList;

    public class SpacecraftsCollection implements Serializable {

        private ArrayList<String> spacecrafts;

        public ArrayList<String> getSpacecrafts() {
            return spacecrafts;
        }

        public void setSpacecrafts(ArrayList<String> spacecrafts) {
            this.spacecrafts = spacecrafts;
        }
    }

**2. SecondActivity.java***

  • Esta é nossa segunda classe de atividade.
  • Receberá um arrailista seriado contendo nossas naves espaciais e o deserializará e exibirá na segunda visualização da lista.

    package com.tutorials.hp.listviewdatapassing;

    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;

    public class SecondActivity extends AppCompatActivity {

        //SECOND LISTVIEW
        ListView lv;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_second);

            lv= (ListView) findViewById(R.id.secondLV);

            receiveData();
        }

        /*
        RECEIVE DATA FROM FIRST ACTIVITY
         */
        private void receiveData()
        {
            Intent i=this.getIntent();
            SpacecraftsCollection spacecraftsCollection= (SpacecraftsCollection) i.getSerializableExtra("SPACECRAFTS");

            lv.setAdapter(new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,spacecraftsCollection.getSpacecrafts()));
        }
    }

**3. MainActivity.java***

  • Nossa classe MainActivity.
  • Nossos dados do arraylist serão transferidos daqui para a segunda atividade quando o botão de ação flutuante for clicado.

    package com.tutorials.hp.listviewdatapassing;

    import android.content.Intent;
    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.Snackbar;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.View;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;

    import java.util.ArrayList;

    public class MainActivity extends AppCompatActivity {

        //FIRST LISTVIEW
        ListView lv;
        ArrayList spacecrafts=new ArrayList();

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);

            lv= (ListView) findViewById(R.id.firstLV);
            populateData();
            lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,spacecrafts));

            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    lv.setAdapter(new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,new ArrayList<String>()));
                    sendData();
                }
            });
        }

        //POPULATE SPACECRAFTS ARRAYLIST
        private void populateData()
        {
            spacecrafts.add("Casini");
            spacecrafts.add("Enterprise");
            spacecrafts.add("Spitzer");
            spacecrafts.add("Huygens");
            spacecrafts.add("WMAP");
            spacecrafts.add("Juno");
            spacecrafts.add("Kepler");
            spacecrafts.add("Apollo 15");
            spacecrafts.add("Challenger");
            spacecrafts.add("Discovery");
        }

        /*
        SET ARRAYLIST TO SPACECRAFTS COLLECTION CLASS
         */
        private SpacecraftsCollection getData()
        {
            SpacecraftsCollection spacecraftsCollection=new SpacecraftsCollection();
            spacecraftsCollection.setSpacecrafts(spacecrafts);

            return spacecraftsCollection;
        }

        /*
        SEND DATA TO SECOND ACTIVITY
         */
        private void sendData()
        {
            Intent i=new Intent(this,SecondActivity.class);
            i.putExtra("SPACECRAFTS",this.getData());
            startActivity(i);
        }
    }

Resultado

Aqui está o que você recebe quando executa o projeto:

Como passar dados da ListView para a ListView

Download

Código para download aqui.

Categorized in: