Android source activity java

Passing Data Between Activities Android Tutorial

When you develop an android application, you always need to pass data between activities. And even more, you sometimes need to pass data between all activities for example pass session-id, user-name, and password. In this article, I will tell you how to use android Intent or Application object to pass data between activities.

1. Pass Data Between Activities Overview.

  1. There are two activities in this example, a Source Activity, and a Target Activity.
  2. The Source Activity contains two buttons ( PASS DATA TO NEXT ACTIVITY and PASS DATA TO NEXT ACTIVITY AND GET RESULT BACK ).
  3. The Target Activity contains one button ( PASS RESULT DATA BACK TO SOURCE ACTIVITY ).
  4. If you click the first button in the Source Activity, it will pass data to the Target Activity, and when you click the return button in the Target Activity, the Source Activity can not get the response data from Target Activity. See the video demo from https://youtu.be/SKjZblBXoik.
  5. If you click the second button in the Source Activity, it will pass data to the Target Activity also, and when you click the return button or click the android Back menu at the bottom in the Target Activity, the Source Activity can get the Target Activity returned response result data and display the result text in the Source Activity. See the video demon from https://youtu.be/4_cBFxwtc50.

2. Pass Data Between Activities Use Intent Object.

  1. Create an instance of android.content.Intent class, pass the Source Activity object ( who sent the intent object ) and the Target Activity class ( who can receive the intent object ) to the Intent class constructor.
Intent intent = new Intent(PassingDataSourceActivity.this, PassingDataTargetActivity.class);
intent.putExtra("message", "This message comes from PassingDataSourceActivity's first button");
String message = intent.getStringExtra("message");

3. Pass Data Back From Target Activity.

  1. Create a New Explicit or Implicit android.content.Intent class’s instance in the Source Activity.
Intent intent = new Intent(PassingDataSourceActivity.this, PassingDataTargetActivity.class);
intent.putExtra("message", "This message comes from PassingDataSourceActivity's second button");
startActivityForResult(intent, REQUEST_CODE_1);
Intent intent = new Intent();
intent.putExtra("message_return", "This data is returned when user click button in target activity.");
setResult(RESULT_OK, intent);
@Override protected void onActivityResult(int requestCode, int resultCode, Intent dataIntent) < super.onActivityResult(requestCode, resultCode, dataIntent); switch (requestCode) < case REQUEST_CODE_1: TextView textView = (TextView)findViewById(R.id.resultDataTextView); if(resultCode == RESULT_OK) < String messageReturn = dataIntent.getStringExtra("message_return"); textView.setText(messageReturn); >> >

4. Pass Data Between Activities Example Source Code.

4.1 Source Activity Layout Xml File.

4.2 Source Activity Java Code.

package com.dev2qa.example; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; public class PassingDataSourceActivity extends AppCompatActivity < private final static int REQUEST_CODE_1 = 1; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_passing_data_source); setTitle("dev2qa.com - Source Activity"); // Click this button to pass data to target activity. Button passDataSourceButton = (Button)findViewById(R.id.passDataSourceButton); passDataSourceButton.setOnClickListener(new View.OnClickListener() < @Override public void onClick(View view) < Intent intent = new Intent(PassingDataSourceActivity.this, PassingDataTargetActivity.class); intent.putExtra("message", "This message comes from PassingDataSourceActivity's first button"); startActivity(intent); >>); // Click this button to pass data to target activity and // then wait for target activity to return result data back. Button passDataReturnResultSourceButton = (Button)findViewById(R.id.passDataReturnResultSourceButton); passDataReturnResultSourceButton.setOnClickListener(new View.OnClickListener() < @Override public void onClick(View view) < Intent intent = new Intent(PassingDataSourceActivity.this, PassingDataTargetActivity.class); intent.putExtra("message", "This message comes from PassingDataSourceActivity's second button"); startActivityForResult(intent, REQUEST_CODE_1); >>); > // This method is invoked when target activity return result data back. @Override protected void onActivityResult(int requestCode, int resultCode, Intent dataIntent) < super.onActivityResult(requestCode, resultCode, dataIntent); // The returned result data is identified by requestCode. // The request code is specified in startActivityForResult(intent, REQUEST_CODE_1); method. switch (requestCode) < // This request code is set by startActivityForResult(intent, REQUEST_CODE_1) method. case REQUEST_CODE_1: TextView textView = (TextView)findViewById(R.id.resultDataTextView); if(resultCode == RESULT_OK) < String messageReturn = dataIntent.getStringExtra("message_return"); textView.setText(messageReturn); >> > >

4.3 Target Activity Layout Xml File.

4.4 Target Activity Java Code.

  1. Click the return button in the target activity. There is java code that listens to the return Button click event.
  2. Type back menu in android device. You should override Activity.onBackPressed() method to process this event.
package com.dev2qa.example; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; public class PassingDataTargetActivity extends AppCompatActivity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_passing_data_target); setTitle("dev2qa.com - Target Activity"); // Get the passed data from source activity. Intent intent = getIntent(); String message = intent.getStringExtra("message"); TextView textView = (TextView)findViewById(R.id.requestDataTextView); textView.setText(message); // Click this button to send response result data to source activity. Button passDataTargetReturnDataButton = (Button)findViewById(R.id.passDataTargetReturnDataButton); passDataTargetReturnDataButton.setOnClickListener(new View.OnClickListener() < @Override public void onClick(View view) < Intent intent = new Intent(); intent.putExtra("message_return", "This data is returned when user click button in target activity."); setResult(RESULT_OK, intent); finish(); >>); > // This method will be invoked when user click android device Back menu at bottom. @Override public void onBackPressed() < Intent intent = new Intent(); intent.putExtra("message_return", "This data is returned when user click back menu in target activity."); setResult(RESULT_OK, intent); finish(); >>

5. How To Share Data Between Multiple Activities.

  1. A reader comments that he has multiple activities, each activity want to set some data in somewhere, and when all the activities set data finished, the last activity will send all the activities saved data to a database, how to implement this?
  2. There are 2 methods to share data between activities.1. Share data in memory. 2. Share data in a local file. When your last activity wants to save the data to the database, it can either read the data from memory or a local file then save the data to the database.
  3. To share data in memory, you can use the android application singleton, you should create your own android java class that extends the android.app.Application class. Then your android application instance will be created when the android app startup. Below is the source code of your own android application class.
// Import android.app.Application class. import android.app.Application; // Create your own android Application class. public class MyOwnApplication extends Application < // Used to share data across multiple activities in the same android application. private String data; // Define get data method. public String getData() < return data; >// Define set data method. public void setData(String data) < this.data = data; >>

Now in each activity, you can run the code MyOwnApplication app = MyOwnApplication.getApplicationContext(); to get the application object, then call the app.setData(data) method to set the share data.

Читайте также:  Расширения абстрактных классов java

In the last activity which you want to save the data to a database, you can run the code MyOwnApplication app = MyOwnApplication.getApplicationContext(); to get the application object, and then call the code app.getData() to get the data saved by multiple activities. Now you can save the shared data into a database.

Источник

Android source activity java

В прошлых темах мы создали первый проект, однако весь проект состоял лишь из примитивного кода, добавляемого по умолчанию. Теперь определим сами приложение, которое также также будет очень простое. Пусть на одной странице приложения мы будем вводить некоторые данные и по нажатию на кнопку будет происходить переход к другой странице приложения, которая будет отображать ранее введенные данные.

Итак, возьмем ранее созданный проект (или создадим новый).

Добавление новой Activity

И по умолчанию у нас уже есть одна activity — класс MainActivity. Теперь добавим еще одну. Для этого нажмем правой кнопкой мыши в структуре проекта на папку, в котором находится класс MainActivity , и затем в контекстном меню выберем New->Activity->Empty Activity :

Добавление новой activity в Android Studio

После этого откроется диалоговое окно создания новой activity:

Создание новой activity в Android Studio

В этом окне в поле Activity Name введем MessageActivity . После этого в поле Layout Name автоматически должно установиться activity_message (если не устновилось, то введем в это поле activity_message ). В остальных полях оставим значения по умолчанию:

  • Package Name — должен иметь то же название, что и пакет, в котором находится MainActivity
  • Source Language должен иметь значение Java

После этого в папке с MainActivity должен появиться файл с новой activity — MessageActivity:

Добавление Activity в Android Studio

Кроме того, в каталоге res/layout должен появиться файл activity_message.xml , который представляет описание графического интерфейса для MessageActivity.

Вначале откроем файл activity_message.xml и изменим его код следующим образом:

Определение интерфейса для MessageActivity содержит только элемент TextView, который выводит некоторую строку на экран. Рассмотрим установленные в нем атрибуты:

Добавление layout и activity в Java в Android Studio

  • android:id=»@+id/messageText» — TextView имеет идентификатор «messageText», через который мы сможем обращаться к TextView в коде java. Символ @ указывает XML-парсеру использовать оставшуюся часть строки атрибута как идентификатор. А знак + означает, что если для элемента не определен id со значением messageText, то его следует определить.
  • android:layout_width=»wrap_content» — ширина текстового поля будет такой, чтобы вместить все его содержимое на экране
  • android:layout_height=»wrap_content» — высота TextView будет такой, чтобы вместить все его содержимое на экране
  • android:textSize=»18sp» — высота текста в TextView составляет 18 единиц (для установки высоты шрифта используется величина sp)
  • app:layout_constraintBottom_toBottomOf=»parent» — нижний край TextView будет выравниваться по нижней стороне контейнера ConstraintLayout
  • app:layout_constraintLeft_toLeftOf=»parent» — левая граница TextView будет выравниваться по левой стороне контейнера ConstraintLayout
  • app:layout_constraintRight_toRightOf=»parent» — правый край TextView будет выравниваться по правой стороне контейнера ConstraintLayout
  • app:layout_constraintTop_toTopOf=»parent» — верхний край TextView будет выравниваться по верхней стороне контейнера ConstraintLayout

Получение данных

Суть MessageActivity будет заключаться в том, что она будет получать некое текстовое сообщение и выводить его на экран (формально в элемент TextView, который был определен выше). Как мы можем получить в MessageActivity (и в любой другой activity) некоторые данные, которые переданы из другой activity?

Возьмем код класса MessageActivity. По умолчанию он выглядит так:

package com.example.helloapp; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; public class MessageActivity extends AppCompatActivity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_message); >>

И изменим его следующим образом:

package com.example.helloapp; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.widget.TextView; public class MessageActivity extends AppCompatActivity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_message); // Получаем объект Intent, который запустил данную activity Intent intent = getIntent(); // Получаем сообщение из объекта intent String message = intent.getStringExtra("message"); // Получаем TextView по его id TextView messageText = findViewById(R.id.messageText); // устанавливаем текст для TextView messageText.setText(message); >>

Также, как и в MainActivity (и в других activity), создание текущей activity происходит в методе onCreate() . Все классы activity должны реализовать метод onCreate , так как система вызывает его при создании новой activity. Именно в этом методе задается компоновка нового объекта activity с помощью метода setContentView и именно здесь происходит начальная настройка компонентов.

Каждый объект Activity вызывается объектом Intent . Мы можем в коде Java получить вызывающий объект Intent с помощью метода getIntent :

Но Intent нам важен не сам по себе, а потому что через него в эту activity будут передаваться данные. Эти данные могут представлять различные типы, но в здесь мы предполагаем, что в MainActivity будет передаваться строка. И для получения строки у объекта Intent вызывается метод getStringExtra() :

String message = intent.getStringExtra("message");

В метод передается ключ данных. То есть каждый элемент передаваемых данных представлен в формате «ключ-значение». Через ключ мы можем получить значение. И в данном случае ключом будет «message». А значение по этому ключу попадет в переменную String message .

Получив переданные в MessageActivity данные, мы можем передать их в TextView для вывода на экране устройства. Для этого вначале находим виждет TextView по его id и затем вызываем его метод setText() , который устанавливает выводимый в TextView текст:

TextView messageText = findViewById(R.id.messageText); messageText.setText(message);

Таким образом, MessageActivity получит переданное ей сообщение и выведет его в TextView. Теперь рассмотрим, как вызвать эту activity из MainActivity и как передать ей это сообщение.

Источник

Оцените статью