Android - Passando informações entre Activities
Links relacionados: Dispositivos Móveis
Descrição
Vamos criar aqui duas activities do tipo Empty. A primeira ficará com o nome defout Main e a segunda coloque o nome de Second.
strings.xml
Vamos adicionar novas strings em res/values/strings.xml.
Observe nas últimas duas strings abaixo. Elas possuem alguns elementos do tipo %1$s. Este primeiro significa que no código será dado uma informação do tipo string para substituir este parâmetro. O segundo parâmetro %2$d informa que o segundo parâmetro será um inteiro. Veremos como fazer o uso disso nos nossos arquivos java.
<resources>
<string name="app_name">Main Activity</string>
<string name="second_name">Second Activity</string>
<string name="name">Name</string>
<string name="age">Age</string>
<string name="send">Send</string>
<string name="approved">Approved</string>
<string name="rejected">Rejected</string>
<string name="message_error">Something is wrong!</string>
<string name="message_from_main">User %1$s is %2$d years old.</string>
<string name="message_situation">This user was %1$s.</string>
</resources>
Interfaces
activity_main.xml
1<?xml version="1.0" encoding="utf-8"?>
2<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:app="http://schemas.android.com/apk/res-auto"
4 xmlns:tools="http://schemas.android.com/tools"
5 android:layout_width="match_parent"
6 android:layout_height="match_parent"
7 tools:context=".MainActivity">
8
9 <EditText
10 android:id="@+id/editTextName"
11 android:layout_width="0dp"
12 android:layout_height="wrap_content"
13 android:layout_marginEnd="8dp"
14 android:layout_marginStart="8dp"
15 android:layout_marginTop="8dp"
16 android:ems="10"
17 android:inputType="textPersonName"
18 app:layout_constraintEnd_toEndOf="parent"
19 app:layout_constraintStart_toStartOf="parent"
20 app:layout_constraintTop_toTopOf="parent"
21 tools:text="@string/name" />
22
23 <EditText
24 android:id="@+id/editTextAge"
25 android:layout_width="0dp"
26 android:layout_height="wrap_content"
27 android:layout_marginEnd="8dp"
28 android:layout_marginStart="8dp"
29 android:layout_marginTop="8dp"
30 android:ems="10"
31 android:inputType="number"
32 app:layout_constraintEnd_toEndOf="parent"
33 app:layout_constraintStart_toStartOf="parent"
34 app:layout_constraintTop_toBottomOf="@+id/editTextName"
35 tools:text="@string/age" />
36
37 <Button
38 android:id="@+id/buttonSend"
39 android:layout_width="wrap_content"
40 android:layout_height="wrap_content"
41 android:layout_marginEnd="8dp"
42 android:layout_marginStart="8dp"
43 android:layout_marginTop="8dp"
44 android:text="@string/send"
45 app:layout_constraintEnd_toEndOf="parent"
46 app:layout_constraintStart_toStartOf="parent"
47 app:layout_constraintTop_toBottomOf="@+id/editTextAge" />
48
49 <TextView
50 android:id="@+id/textViewResult"
51 android:layout_width="0dp"
52 android:layout_height="wrap_content"
53 android:layout_marginEnd="8dp"
54 android:layout_marginStart="8dp"
55 android:layout_marginTop="8dp"
56 app:layout_constraintEnd_toEndOf="parent"
57 app:layout_constraintStart_toStartOf="parent"
58 app:layout_constraintTop_toBottomOf="@+id/buttonSend" />
59</android.support.constraint.ConstraintLayout>
activity_second.xml
1<?xml version="1.0" encoding="utf-8"?>
2<?xml version="1.0" encoding="utf-8"?>
3<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
4 xmlns:app="http://schemas.android.com/apk/res-auto"
5 xmlns:tools="http://schemas.android.com/tools"
6 android:layout_width="match_parent"
7 android:layout_height="match_parent"
8 tools:context=".SecondActivity">
9
10 <TextView
11 android:id="@+id/textViewInfo"
12 android:layout_width="0dp"
13 android:layout_height="wrap_content"
14 android:layout_marginEnd="8dp"
15 android:layout_marginStart="8dp"
16 android:layout_marginTop="8dp"
17 android:text="textView"
18 app:layout_constraintEnd_toEndOf="parent"
19 app:layout_constraintStart_toStartOf="parent"
20 app:layout_constraintTop_toTopOf="parent" />
21
22 <Button
23 android:id="@+id/buttonAproved"
24 android:layout_width="wrap_content"
25 android:layout_height="wrap_content"
26 android:layout_marginStart="8dp"
27 android:layout_marginTop="8dp"
28 android:text="@string/approved"
29 app:layout_constraintStart_toStartOf="parent"
30 app:layout_constraintTop_toBottomOf="@+id/textViewInfo" />
31
32 <Button
33 android:id="@+id/buttonRejected"
34 android:layout_width="wrap_content"
35 android:layout_height="wrap_content"
36 android:layout_marginEnd="8dp"
37 android:layout_marginTop="8dp"
38 android:text="@string/rejected"
39 app:layout_constraintEnd_toEndOf="parent"
40 app:layout_constraintTop_toBottomOf="@+id/textViewInfo" />
41</android.support.constraint.ConstraintLayout>
AndroidManifest.xml
Altere as informações da segunda activity criada para mudar o título dela no AndroidManifest.xml.
<activity
android:name=".SecondActivity"
android:label="@string/second_name" />
Programa Java
MainActivity.java
O código da Main envia informações para a segunda activity e recebe informações.
1package com.example.saulo.myapplication;
2
3import android.content.Intent;
4import android.support.v7.app.AppCompatActivity;
5import android.os.Bundle;
6import android.view.View;
7import android.widget.Button;
8import android.widget.EditText;
9import android.widget.TextView;
10
11public class MainActivity extends AppCompatActivity {
12
13 @Override
14 protected void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.activity_main);
17 Button send = findViewById(R.id.buttonSend);
18 send.setOnClickListener(new View.OnClickListener() {
19 @Override
20 public void onClick(View v) {
21 EditText name = findViewById(R.id.editTextName);
22 EditText age = findViewById(R.id.editTextAge);
23
24 Intent intent = new Intent(MainActivity.this, SecondActivity.class);
25 Bundle parameters = new Bundle();
26 parameters.putString("name", name.getText().toString());
27 parameters.putInt("age", Integer.valueOf(age.getText().toString()));
28 intent.putExtras(parameters);
29 startActivityForResult(intent, 0);
30 }
31 });
32 }
33
34 @Override
35 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
36 if (resultCode == RESULT_OK) {
37 if (data.getExtras() != null && data.hasExtra("situation")) {
38 String situation = data.getExtras().getString("situation");
39 TextView result = findViewById(R.id.textViewResult);
40 result.setText(getResources().getString(R.string.message_situation, situation));
41 }
42 }
43 }
44}
SecondActivity.java
Este código recebe da Main activity duas informações, o nome (string) e a idade (int). Veja que quando mostramos na tela a mensagem com essas informações, buscamos ela do recurso string, substituindo os parâmetros configurando em strings.xml.
1package com.example.saulo.myapplication;
2
3import android.content.Intent;
4import android.support.v7.app.AppCompatActivity;
5import android.os.Bundle;
6import android.view.View;
7import android.widget.TextView;
8
9public class SecondActivity extends AppCompatActivity implements View.OnClickListener {
10
11 @Override
12 protected void onCreate(Bundle savedInstanceState) {
13 super.onCreate(savedInstanceState);
14 setContentView(R.layout.activity_second);
15
16 TextView textViewInfo = findViewById(R.id.textViewInfo);
17 Bundle args = getIntent().getExtras();
18 if (args != null && getIntent().hasExtra("name") && getIntent().hasExtra("age")) {
19 String name = args.getString("name");
20 int age = args.getInt("age");
21 textViewInfo.setText(getResources().getString(R.string.message_from_main, name, age));
22 } else {
23 textViewInfo.setText(getResources().getString(R.string.message_error));
24 }
25 findViewById(R.id.buttonAproved).setOnClickListener(this);
26 findViewById(R.id.buttonRejected).setOnClickListener(this);
27 }
28
29 @Override
30 public void onClick(View v) {
31 Intent data = new Intent();
32 Bundle parameters = new Bundle();
33 switch (v.getId()) {
34 case R.id.buttonAproved:
35 parameters.putString("situation", getResources().getString(R.string.approved));
36 break;
37 case R.id.buttonRejected:
38 parameters.putString("situation", getResources().getString(R.string.rejected));
39 break;
40 }
41 data.putExtras(parameters);
42 setResult(RESULT_OK, data);
43 finish();
44 }
45}
Atividades
Para começar, utilize a atividade feita no Android - Exemplo de ListView. Faça as seguintes modificações:
- Crie uma segunda activity com um EditText e dois Buttons;
- Quando você clicar em um item da ListView da activity Main, você abre a segunda activity mandando esse item pra ela.
- O item irá aparecer no EditText dessa segunda activity e você pode alterar as informações dela.
- Se você clicar no botão Gravar, você envia a informação de volta para a Main, alterando a informação do item na ListView.
- Caso você clique em Cancelar, você apenas volta para a Main sem alterar nada.