Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Передача данных между 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; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.008 с.)
Главная | Случайная страница | Обратная связь