Passagem de dados Android – Fragmento para Atividade, Atividade para Fragmento.
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:
- `Intent'.
Bundle.- 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?
| --- |
|---|
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
Fragmentoconté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
fragmentopara umaatividade. - Como passar dados entre o
fragmentoe aatividadeutilizando intentos. - Como faço para realizar a FragmentTransaction.
- Substituir em Retomar() e receber dados em andróide.
- Como trabalhar tanto com o
fragmentoquanto com aatividade.
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
fragmentomas também depois que aatividadefor criada e iniciada, precisaremos identificar o chamador utilizando uma simples string do Remetente que enviaremos toda vez que enviarmos dados dofragmento. - 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
Fragmentopor isso estendemosandroid.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
| --- |
|---|
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".
| --- |
|---|
(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á:

Mais recursos
| --- |
|---|
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
- Primeiro, criar um novo projeto no estúdio andróide. Ir para Arquivo --> Novo Projeto.
- Digite o nome do aplicativo e escolha o nome da empresa.
- Escolha o SDK mínimo.
- Escolher Vazio ou
atividade Básica. - 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***.
| --- |
|---|
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".
| --- |
|---|
(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:

PASSO 8 : Mais
| --- |
|---|
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 segundaatividade`.
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
atividadequando 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:

Download
Código para download aqui.