Передача данных между двумя Activity
Главная » Передача данных между двумя Activity

Мы уже работали над созданием перехода между двумя Activity. Сегодняшний урок довольно похож, но имеет некоторое усложнение - мы будем не просто переходить с одного Activity на другое, но и передавать между ними текстовые данные.

Суть приложения будет в том, что в одном окне будет две формы EditView для заполнения текстом и кнопка Button перехода на другое окно, а  в другом - два элемента TextView, которые будут отображать текст, который был введен в  EditView в первой Activity и кнопка возвращения назад.

Создаем новый проект с Blank Activity, все названия я оставлю по умолчанию. 

Для начала настроим интерфейс первого Activity. Открываем файл activity_main.xml. Мы добавим сюда 2 элемента EditText для ввода текста и кнопку Button

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

 <EditText
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:id="@+id/et1"
 android:hint="Введите имя"/>
 <EditText
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:id="@+id/et2"
 android:hint="Введите фамилию"/>
 <Button
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:id="@+id/b1"
 android:text="Передать"
 android:layout_gravity="center"
 android:onClick="Send"/>

</LinearLayout>

Все, внешний вид первого Activity готов:

Теперь нам нужно создать новый Activity. В папке Java/имя_вашего_приложения нашего приложения создаем новый Java Class. Клик правой кнопкой мышки по указанной папке New --- Java Class:

 Зададим ему имя Second. Проследите, чтобы созданный класс Second.java находился в одной папке с MainActivity.java:

Для этого класса нужно создать соответствующий layout - файл, который будет отвечать за его внешний вид (интерфейс). В папке res/layout создаем (правый клик по папке layout --- New --- Layout resourse file) файл по имени second

Сразу настроим внешний вид второго Activity. Открываем файл созданный second.xml и добавляем 2 элемента TextView и кнопку Button:

<?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:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:id="@+id/tv1"
 android:text="Имя: "
 android:textSize="18dp"/>
 <TextView
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:id="@+id/tv2"
 android:text="Фамилия: "
 android:textSize="18dp"/>
 <Button
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:id="@+id/b2"
 android:text="Назад"
 android:layout_gravity="center"
 android:onClick="Back"/>

</LinearLayout>

Внешне это выглядит так:

В файле activity_main.xml мы создавали кнопку "Передать" и создали для нее метод нажатия (подчеркнуто):

<Button
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:id="@+id/b1"
 android:text="Передать"
 android:layout_gravity="center"
 android:onClick="Send"/>

Чтобы описать процесс нажатия, нужно добавить метод обработки нажатия в MainActivity.java. Для этого ставим курсор на слово "Send" в коде кнопки и жмем комбинацию Alt+Enter и выбираем первую строку Create 'Send(View)' in 'MainActivity'

Переходим к редактированию файла MainActivity.java. Объявляем используемые переменные, привязываем их к созданным элементам интерфейса, создаем с помощью класса Intent переход на Second.java, а также настраиваем получение текстовых данных с элементов EditText для передачи в Second.java:

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import static home.study.R.id.b1;

 public class MainActivity extends Activity {
 //Объявляем объекты, которые будем использовать:
 private EditText mName;
 private EditText mFam;
 private Button mGo;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 
 //Привязываем объявленные объекты к созданным нами элементам в activity_main.xml:
 mName=(EditText)findViewById(R.id.et1);
 mFam=(EditText)findViewById(R.id.et2);
 mGo=(Button)findViewById(b1);
 }
 //Обрабатываем нажатие кнопки "Передать"
 public void Send(View view) {
 switch (view.getId()) {
 case R.id.b1:
 
 //Создаем переход:
 Intent intent=new Intent(MainActivity.this,Second.class);
 //Создаем данные для передачи:
 intent.putExtra("name", mName.getText().toString());
 intent.putExtra("fam", mFam.getText().toString());
 //Запускаем переход:
 startActivity(intent);
 break;
 default: break;
 }
}}

Создадим метод для обработки нажатия кнопки "Назад" в файле second.xml. Делаем все аналогично кнопке "Передать" (курсор на "Back" - Alt+Enter --- Enter):

<Button
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:id="@+id/b2"
 android:text="Назад"
 android:layout_gravity="center"
 android:onClick="Back"/>

Теперь переходим к редактированию файла Second.java. Для начала нужно привязать его к second.xml интерфейсу:

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

Теперь объявляем объекты, привязываем их к созданным в файле разметки интерфейса, настраиваем строковые ресурсы с полученных с первого Activity данных и выводим на экран, а также для обработчика нажатия клавиши пишем код перехода обратно:

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 Second extends Activity {
 //Объявляем объекты, которые будем использовать:
 private TextView mT1;
 private TextView mT2;
 private Button mBack;

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

 //Привязываем объявленные объекты к созданным нами элементам в second.xml:
 mT1=(TextView)findViewById(R.id.tv1);
 mT2=(TextView)findViewById(R.id.tv2);
 mBack=(Button)findViewById(R.id.b2);
 
 //Получаем текстовые данные с первого Activity:
 String Name = getIntent().getStringExtra("name");
 String Fam = getIntent().getStringExtra("fam");
 
 //Присваиваем созданным элементам TextView значение полученных текстовых данных:
 mT1.setText(mT1.getText().toString()+ "" + Name);
 mT2.setText(mT2.getText().toString()+ "" + Fam);
 }
 
 public void Back(View view) {
 //Создаем обратный переход по нажатию на кнопку "Назад":
 Intent intent=new Intent(Second.this,MainActivity.class);
 startActivity(intent);
 }
}

Остается только объявить о созданном Second.java в файле манифеста. Открываем AndroidManifest.xml и добавим туда между тегами <application></application> :

<activity 
 android:name=".Second"
 android:label="Second">
</activity>

Вот и все, приложение готово, можно переходить к тестированию. 

Категория: Уроки программирования | Просмотров: 3559 | Добавил: Oleg | Рейтинг: 5.0/2
Всего комментариев: 4
avatar
1 pomrfv • 16:09, 14.05.2015
Это самые понятные уроки из числа тех что я видел за последнее время. Олег Огромное Вам Спасибо  :)))
avatar
2 pomrfv • 15:59, 18.05.2015
@Override  Подчеркивает красным и при старте эмулятора не отбражает второй Layout , просто белый экран. К чему бы это ?
avatar
3 pomrfv • 16:17, 18.05.2015
Упс , была ошибка в написании , всё работает .
avatar
4 Sitri • 22:17, 18.05.2015
А еще способы передачи данных есть кроме интент ( программа пишет это метод использовать нельзя он нон статик )???
avatar