Афоризм
Я стою дорого, особенно в одежде.
Наталья Резник
Последние статьи

 • Ограничение доступа
Ограничение прав доступа к организациям на уровне БД
 • Ролевой механизм
Интегрирование ролей БД в приложениe JaBricks
 • Загрузка модулей
Динамическая загрузка модулей в приложениe
 • платформа JaBricks
Платформа OSGi-приложения JaBricks
 • Активности Android
Многоэкранные Android приложения
 • Fragment dynamic
Динамическая загрузка фрагментов в Android
 • Fragment lifecycle
Жизненный цикл Fragment'ов в Android
 • Fragment example
Пример Fragment'ов в Android
 • Data Binding
Описание и пример Data Binding
 • Пример MVVM
Пример использования MVVM в Android
 • Компонент TreeTable
Описание компонента TreeTable для Swing
 • Пример TreeTable
Пример использования TreeTable
 • Хранилища Android
Внутренние и внешние хранилища данных
 • Пример SQLite
Пример использования SQLite в Android
 • WebSocket
Описание и пример реализации WebSocket
 • APK-файл Android
Создание apk-файла для android устройств, .dex файлы
Поддержка проекта

Если Вам сайт понравился и помог, то будем признательны за Ваш «посильный» вклад в его поддержку и развитие
 • Yandex.Деньги
  410013796724260

Многоэкранные Android приложения

Одноэкранное приложение используется, как правило, в качестве примера, либо демонстрации какой-либо технологии/концепции. В разрабатываемых же приложениях одним экраном обойтись невозможно. В данной статье рассматривается пример создания многоэкранного приложения с использованием двух активностей.

На следующих скриншотах представлен рассматриваемый на странице пример смены двух экранов, которая выполняется нажатием на кнопки. Так, при нажатии на кнопку «Настройки» первой активности создается новая активность и выполняется её вызов, т.е. переход ко второй активности; один экран сменяется другим. Чтобы вернуться к первой активности необходимо нажать на соответствующую кнопку второй активности «Назад». В примере также демонстрируется функция передачи нескольких разнотипных значений между активностями.

Интерфейс примера многоэкранного приложения android Интерфейс примера  многоэкранного приложения android

Описание примера

На следующем скриншоте представлен модуль создания activities_01 (IDE Android Studio), в котором реализуется функция cоздания и вызов активности. Модуль включает интерфейс IConstant и 2 активности. При старте примера создается первая активность MainActivity. Вторая активность SettingsActivity создается и вызывается при нажатии на кнопку "Настройки" первой активности. Интерфейс IConstants включает набор констант, которые используются при передаче информации из одной активности в другую.

Модуль многоэкранного примера android

Манифест AndroidManifest

В манифесте AndroidManifest.xml описываются используемые в приложения активности. При создании в проекте новой активности Android Studio автоматически создает в манифесте тег activity, в которой определяется класс активности (android:name) и доступ к активности (android:exported). Второй атрибут тега имеет логическое значение, определяющее доступ к активности только внутри приложения (android:exported="false"), либо из других приложений (android:exported="true").

В активности MainActivity определен фильтр намерений – это выражение в файле манифеста приложения, в котором указывается тип намерений. После объявления фильтра намерений для активности, другие приложения могут напрямую запускать данную активность с определенным намерением. Если не объявить фильтры намерений для активности, то её можно запустить только с явным намерением.

Листинг AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest 
  xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.activities_01">

  <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/Theme.Projects">
    <activity
        android:name=".SettingsActivity"
        android:exported="false" />
    <activity
        android:name=".MainActivity"
        android:exported="true">
        <intent-filter>
            <action android:name=
                            "android.intent.action.MAIN" />
            <category android:name=
                      "android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
  </application>
</manifest>

Интерфейс IConstants

Интерфейс констант содержит 3 константы, которые используются для передачи и получения пересылаемых сообщений/данных между активностями.

package com.example.activities_01;

public interface IConstants
{
    public final String KEY_string  = "DATA_string" ;
    public final String KEY_int     = "DATA_int"    ;
    public final String KEY_boolean = "DATA_boolean";
}

Активность MainActivity

Класс первой активности включает переопределяемый метод onCreate, вызываемый при старте приложения, и метод onSettingsClick, который вызывается при нажатии на кнопку "Настройки". Привязка метода onSettingsClick к кнопке осуществляется в шаблоне интерфейса activity_main.xml. В методе onSettingsClick создается новое намерение intent, которое передается методу startActivity для старта второй активности. Для передачи параметров из одной активности другой используется метод намерения putExtra, который в качестве первого параметра получает наименование ключевого значения (KEY), а вторым параметром – значение.

Листинг MainActivity

package com.example.activities_01;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity
                          implements IConstants {
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    //-----------------------------------------------------
    public void onSettingsClick(View v)
    {
        Intent intent = new Intent(getApplicationContext(),
                                   SettingsActivity.class);
        intent.putExtra(KEY_string , "intermodular string");
        intent.putExtra(KEY_int    , 12345);
        intent.putExtra(KEY_boolean, Boolean.TRUE);
        startActivity(intent);
    }
}

Шаблон activity_main

Шаблон activity_main описывает интерфейс первой активности, включающий одну единственную кнопку «Настройки». Атрибут описания кнопки android:onClick="onSettingsClick" связывает соответствующий метод активности с кнопкой.

Листинг main_activity.xml

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

  <Button
      android:id="@+id/btnSettings"
      android:layout_width="160dp"
      android:layout_height="48dp"
      android:layout_margin="10dp"
      android:onClick="onSettingsClick"
      android:text="Настройки" />
</LinearLayout>

Активность SettingsActivity

Класс второй активности также включает переопределяемый метод onCreate, вызываемый при создании активности, метод onClick, который вызывается при нажатии на кнопку "Назад", и метод onResume, который выводит в Logcat передаваемые между активностями параметры. Привязка метода onClick к кнопке осуществляется в шаблоне интерфейса activity_settings.xml. В методе onClick создается намерение intent, которое передается методу startActivity для старта первой активности.

Листинг SettingsActivity

public class SettingsActivity extends AppCompatActivity
                              implements IConstants
{
    private  String  key_string  = "Не определено";
    private  int     key_int     = 0;
    private  boolean key_boolean = false;

    private  String  LOG_DEV     = "DEVELOPMENT";
    //-----------------------------------------------------
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);

        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            key_string  = extras.getString (KEY_string );
            key_int     = extras.getInt    (KEY_int    );
            key_boolean = extras.getBoolean(KEY_boolean);
        }
    }
    //-----------------------------------------------------
    public void onClick(View v)
    {
        Intent intent = new Intent(getApplicationContext(),
                                   MainActivity.class);
        startActivity(intent);
    }
    //-----------------------------------------------------
    @Override
    protected void onResume()
    {
        super.onResume();
        Log.d(LOG_DEV, "key_string : "  + key_string );
        Log.d(LOG_DEV, "key_int : "     + key_int    );
        Log.d(LOG_DEV, "key_boolean : " + key_boolean);
    }
}

Шаблон activity_settings

Шаблон activity_settings описывает интерфейс второй активности, включающий метку "Настройки" типа TextView и кнопку «Назад». Атрибут описания кнопки android:onClick="onClick" связывает соответствующий метод активности с кнопкой.

Листинг activity_settings.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/settingsFragment"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:name="com.example.activities_01.SettingsActivity">

  <TextView
      android:id="@+id/textView1"
      android:layout_width="228dp"
      android:layout_height="27dp"
      android:layout_marginStart="32dp"
      android:layout_marginTop="16dp"
      android:text="Настройки"
      android:textSize="16sp"
      android:textStyle="bold"
      app:layout_constraintStart_toStartOf="parent"
      app:layout_constraintTop_toTopOf="parent" />
  <Button
      android:id="@+id/button"
      android:layout_width="128dp"
      android:layout_height="48dp"
      android:layout_marginEnd="32dp"
      android:layout_marginBottom="24dp"
      android:text="Назад"
      android:onClick="onClick"
      app:layout_constraintBottom_toBottomOf="parent"
      app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
  Рейтинг@Mail.ru