Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Передача данных между Activity. Сериализация
Для передачи данных между двумя Activity используется объект Intent. Через его метод putExtra() можно добавить ключ и связанное с ним значение. Например, передача из текущей activity в SecondActivity строки " Hello World" с ключом " hello": // создание объекта Intent для запуска SecondActivityIntent intent = new Intent(this, SecondActivity.class); // передача объекта с ключом " hello" и значением " Hello World" intent.putExtra(" hello", " Hello World" ); // запуск SecondActivitystartActivity(intent);Для передачи данных применяется метод putExtra(), который в качестве значения позволяет передать данные простейших типов - String, int, float, double, long, short, byte, char, массивы этих типов, либо объект интерфейса Serializable. Чтобы получить отправленные данные при загрузке SecondActivity, можно воспользоваться методом get(), в который передается ключ объекта: Bundle arguments = getIntent().getExtras(); String name = arguments.get(" hello" ).toString(); // Hello WorldВ зависимости от типа отправляемых данных при их получении мы можем использовать ряд методов объекта Bundle. Все они в качестве параметра принимают ключ объекта. Основные из них: · get(): универсальный метод, который возвращает значение типа Object. Соответственно поле получения данное значение необходимо преобразовать к нужному типу · getString(): возвращает объект типа String · getInt(): возвращает значение типа int · getByte(): возвращает значение типа byte · getChar(): возвращает значение типа char · getShort(): возвращает значение типа short · getLong(): возвращает значение типа long · getFloat(): возвращает значение типа float · getDouble(): возвращает значение типа double · getBoolean(): возвращает значение типа boolean · getCharArray(): возвращает массив объектов char · getIntArray(): возвращает массив объектов int · getFloatArray(): возвращает массив объектов float · getSerializable(): возвращает объект интерфейса Serializable Пусть у нас в проекте будет определено две activity: MainActivity и SecondActivity. В коде SecondActivity определим получение данных: package com.example.eugene.serializeapp; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView textView = new TextView(this); textView.setTextSize(20); textView.setPadding(16, 16, 16, 16); Bundle arguments = getIntent().getExtras(); if(arguments! =null){ String name = arguments.get(" name" ).toString(); String company = arguments.getString(" company" ); int price = arguments.getInt(" price" ); textView.setText(" Name: " + name + " \nCompany: " + company + " \nPrice: " + price); } setContentView(textView); }}В данном случае в SecondActivity получаем все данных из объекта Bundle и выводим их в текстовое поле TextView. Предполагается, что данной activity будут передаваться три элемента - две строки с ключами name и company и число с ключом price. Теперь определим передачу в SecondActivity данных. Например, определим для MainActivity следующий интерфейс в файле activity_main.xml: <? xml version=" 1.0" encoding=" utf-8"? > < LinearLayout xmlns: android=" http: //schemas.android.com/apk/res/android" xmlns: tools=" http: //schemas.android.com/tools" android: layout_width=" match_parent" android: layout_height=" match_parent" android: orientation=" vertical" android: padding=" 5dp" > < TextView android: layout_width=" match_parent" android: layout_height=" 20dp" android: text=" Name: " /> < EditText android: id=" @+id/name" android: layout_width=" match_parent" android: layout_height=" 40dp" /> < TextView android: layout_width=" match_parent" android: layout_height=" 20dp" android: text=" Company: " /> < EditText android: id=" @+id/company" android: layout_width=" match_parent" android: layout_height=" 40dp" /> < TextView android: layout_width=" match_parent" android: layout_height=" 20dp" android: text=" Price: " /> < EditText android: id=" @+id/price" android: layout_width=" match_parent" android: layout_height=" 40dp" /> < Button android: id=" @+id/btn" android: layout_width=" wrap_content" android: layout_height=" wrap_content" android: onClick=" onClick" android: text=" Save" /> < /LinearLayout>Здесь определены три текстовых поля для ввода данных и кнопка. В классе MainActivity определим следующее содержимое: package com.example.eugene.serializeapp; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void onClick(View v) { final EditText nameText = findViewById(R.id.name); final EditText companyText = findViewById(R.id.company); final EditText priceText = findViewById(R.id.price); String name = nameText.getText().toString(); String company = companyText.getText().toString(); int price = Integer.parseInt(priceText.getText().toString()); Intent intent = new Intent(this, SecondActivity.class); intent.putExtra(" name", name); intent.putExtra(" company", company); intent.putExtra(" price", price); startActivity(intent); }}В обработчике нажатия кнопки получаем введенные в текстовые поля EditText данные и передаем их в объект Intent с помощью метода putExtra(). Затем запускаем SecondActivity. В итоге при нажатии на кнопку запустится SecondActivity, которая получит некоторые введенные в текстовые поля данные.
|
Последнее изменение этой страницы: 2019-05-04; Просмотров: 252; Нарушение авторского права страницы