Android - Passando informações entre Activities

De Aulas

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.