Главная » Передача данных между двумя 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>
Вот и все, приложение готово, можно переходить к тестированию. | |
|
Всего комментариев: 4 | |
| |