Передача данных с одного Activity на другое Activity

В этом уроке я бы хотел вам показать как передавать данные с одного Activity на другое Activity.

Шаг 1

Создаем в нашей Intellij IDEA -> Android Application.

После создаем layout main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Введите ваше имя:"
            android:id="@+id/textView" android:layout_gravity="left|center_vertical"/>
    <EditText
            android:layout_width="167dp"
            android:layout_height="wrap_content"
            android:id="@+id/name" android:layout_gravity="left|center_vertical"/>
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Введите вашу вамилию:"
            android:id="@+id/textView1" android:layout_gravity="left|center_vertical"/>
    <EditText
            android:layout_width="169dp"
            android:layout_height="wrap_content"
            android:id="@+id/lastname" android:layout_gravity="left|center_vertical"/>
    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Go to Activity"
            android:id="@+id/btnActTwo"
            android:onClick="goNewView" android:layout_gravity="left|center_vertical"/>

</LinearLayout>

И так она будет выглядеть:

На этой Layout будут вводится данные и после нажатия на кнопку передаваться на другое окно.

И собственно создадим второй layout куда мы и будем передавать данные с формы.

Назовем её two.xml

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <TextView
            android:id="@+id/nametxt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Ваше имя:" />
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Ваша фамилия: "
            android:id="@+id/lastnametxt" android:layout_gravity="left|center_vertical"/>
    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Назад"
            android:onClick="back"
            android:id="@+id/back_button" android:layout_gravity="left|center_vertical"/>

</LinearLayout>

И так она будет выглядеть после того как мы передадим туда данные.

Layout-ы мы закончили создавать переходим к Activity.

Шаг 2

Создадим теперь Activity для main.xml и назовем его MainActivity.java:

package com.devcolibri.GoActivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

    private Button forward;
    private EditText name;
    private EditText lastName;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        forward = (Button) findViewById(R.id.btnActTwo);
        name = (EditText) findViewById(R.id.name);
        lastName = (EditText) findViewById(R.id.lastname);
    }

}

и для второго layout tow.xml создаем следующий Activity, назовем его NewActivity.java:

package com.devcolibri.GoActivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class NewActivity extends Activity {

    private Button back;
    private TextView name;
    private TextView lastName;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.two);

        back = (Button) findViewById(R.id.back_button);
        name = (TextView) findViewById(R.id.nametxt);
        lastName = (TextView) findViewById(R.id.lastnametxt);
    }

}

Шаг 3

Intent — этот класс позволяет открывать новое Activity, запускать сервис, передавать данные между Activity.

Теперь в MainActivity добавим следующий метод, который передаст значения с формы на другое Activity после клика по кнопке:

public void goNewView(View v){
    switch (v.getId()) {
        case R.id.btnActTwo:
            // Говорим между какими Activity будет происходить связь
            Intent intent = new Intent(this, NewActivity.class);

            // указываем первым параметром ключ, а второе значение
            // по ключу мы будем получать значение с Intent
            intent.putExtra("name", name.getText().toString());
            intent.putExtra("lastname", lastName.getText().toString());

            // показываем новое Activity
            startActivity(intent);
            break;
        default:
            break;
    }
}

Теперь нужно вывести переданные значения на новом Activity. Для этого в NewActivity.java напишите следующий код, а именно в методе onCreate():

// Принимаем имя
String txtName = getIntent().getStringExtra("name");

// Принимаем фамилию
String txtLastname = getIntent().getStringExtra("lastname");

// выводим принятое имя
name.setText(name.getText().toString() + " " + txtName);

// Выводим принятую фамилию
lastName.setText(lastName.getText().toString() + " " + txtLastname);

И последнее, что нужно сделать, добавить метод обработчика кнопки Назад в классе NewActivity.java:

public void back(View v){
    switch (v.getId()) {
        case R.id.back_button:
            Intent intent = new Intent(this, MainActivity.class);
            startActivity(intent);
            break;
        default:
            break;
    }
}

p.s. На этом все, что не понятно пишите в комментария я с радостью отвечу вам.

Урок создан: 29 июня 2013 | Просмотров: 26620 | Автор: Александр Барчук | Правила перепечатки


Добавить комментарий

Добавить комментарий

Ваш e-mail не будет опубликован.

Комментарии:

  • 01 июля 2013 в 17:02

    Федор

    Спасибо за статью.

    А есть какой-то аналог $_SESSION (это в php), чтобы один раз задать, и в любом activity можно было бы вытащить его значение?

  • 28 июля 2013 в 20:43

    timur

    Спасибо.
    все коротко и ясно. по больше бы таких примеров

  • 17 сентября 2013 в 01:09

    Константин

    При нажатии на кнопку, приложение крашится.

  • 01 апреля 2014 в 15:01

    Роман

    Спасибо за статью! Удачи в ваших начинаниях

  • 12 апреля 2014 в 10:46

    Зарина

    Здравствуйте, а при создании несколько кнопок и когда каждая кнопка ведет к разным Activity, какой будет код? Точнее,я ввела аналогичный код для новой кнопки, но при запуске и при нажатии второй кнопки Activity не открывается. Ввела как новый case, в коде вроде все нормально,а при запуске не открывается.буду благодарна!

  • 21 мая 2014 в 08:53

    Роман

    Здравствуйте. У меня такая задача: есть много кнопок разново цвета нужно при нажатии в новом активити выводить название кнопки + строку, и цвет активити должен быть как цвет кнопки, с текстом я както разобралса, а как передать цвет?????….

    • 21 мая 2014 в 10:29

      Александр Барчук

      Попробуйте так:

      ColorDrawable buttonColor = (ColorDrawable) button.getBackground();
      int colorId = buttonColor.getColor();
      intent.putExtra("color", colorId);
      

      Определить цвет можно так:

      if (colorId == R.color.green) {
        log("color is green");
      }
      
  • 24 июля 2014 в 12:43

    Эдуард

    а как передать данные и отобразить их в уже созданном однажды Activity. А то startActivity каждый раз создает новое Activity

  • 08 сентября 2014 в 11:40

    Артур

    А как передать многомерный массив в другое Activity , по примерам выше он так не передается ?

  • 16 апреля 2015 в 14:31

    Вася

    как можно передать одномерный массив? если прописать intent.putExtra(«karti»,karti[]); то выдает ошибку, хотя когда я указываю номер элемента, он легко передает. подскажите, плз

  • 05 августа 2015 в 18:08

    Ренат

    Добрый день! А как передавать объекты между Активити? Допустим есть свой класс, и я хочу передать экземпляр класса.

  • 24 января 2016 в 20:33

    Игнат

    Здравствуйте! Спасибо за столь ясные и приятные примеры.
    Как передать ArrayList?
    у меня есть класс contact в нем 2 переменные имя и фамилия и методы get и set. Так же есть начальное активити в нем я ввожу Н раз имя и фамилию, сохраняя данные в объекте типа ArrayList. Проблема возникает когда я хочу передать этот объект.
    activity1:
    ArrayList person = new ArrayList();


    Intent intent = new Intent(MainActivity.this, ViewActivity.class);
    intent.putExtra(«pers», person);
    startActivity(intent);
    Activity2:
    private ArrayList person= (ArrayList) getIntent().getSerializableExtra(«pers»);