Публикации - Mobile Operating Systems

Android - Activity

Основа любого android-приложение — взаимодействие активностей.

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

Еще активность можно сравнить со страницами разных сайтов, открываемых в браузере по ссылке.

Обычно активности занимают весь экран. Но это не обязательно. Можно создавать полупрозрачные активности и активности ввиде плавающих окон.

При создании android-приложения, сперва необходимо выбрать главную активность экрана, т.е. активность, которая запускается первой.

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

Рассмотрим содержимое файла главной активности: контроллер MainActivity из папки Java.

Оператор package указывает на то, что класс в этом файле является частью пакета package by.colony.mikhalkevich. А с помощью оператора import мы можем импортировать различные интерфейсы и классы в приложение.

Активность представлена экземпляром класса Activity — класса из Android SDK. Данный класс отвечает за взаимодействие пользователя с информацией на экране.

Главная активность приложения. Листинг

package by.colony.mikhalkevich.hello;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

}

Активность имеет жизненный цикл. Начало, когда создается экземпляр активности, промежуточное состояние, и конец, когда экземпляр класса уничтожается. В момент создания активности вызывается метод onCreate().

Активность может находиться в трех состояниях:

  • активная (active, running) – активность находится на переднем плане экрана. Пользователь может взаимодействовать с активным окном.

  • приостановленная (paused) – активность потеряла фокус, но всё еще видна пользователю.

  • остановленная (stopped).

Методы жизненного цикла приложения:

  • protected void onCreate() вызывается при создании активности

  • protected void onStart() вызывается в момент старта активности. Активность еще не видна пользователю, но скоро будет видна.

  • protected void onStop() вызывается в момент остановки активности.

  • protected void onRestart() вызывается после того, как остановленная активность запускается снова.

  • protected void onPause() вызывается в момент, когда пользователь переходит к новой активности, не выходя из текущей.

  • protected void onDestroy() вызывается по окончании работы активности.

Приложение с несколькими активностями

Создать новую активность мы можем двумя способами: в ручную, либо с помощью команды File -> new ->activity -> (выбор нужной активности).

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

Запись в файле манифеста в приложении с двумя активностями. Листинг 1.

<activity android:name=".Main2Activity">activity>

Также автоматически создается класс активности и шаблон, вызываемый классом.

Для вызова активности из метода воспользуемся классом Intent.

Вызов активности из метода. Листинг 1.

import android.content.Intent;

public void Back(View view) {
 //Создаем обратный переход по нажатию на кнопку "Назад":
 Intent intent=new Intent(Second.this,MainActivity.class);
 startActivity(intent);
}

Передача данных между активностями осуществляется с помощью метода putExtra класса Intent.

Рассмотрим передачу данных между активностями на примере. Для этого создадим две активности: MainActivity и Second.

MainActivity. Листинг 1.

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());
 //Запускаем переход:

MainActivity вызывает шаблон activity_main, в котором два элемента формы для ввода текста и кнопка, по нажатию на которую вызывается метод Send первой активности.

Шаблон activity_main. Листинг 1.

<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>

Переходим к редактированию второй активности.

Активность Second. Листинг 1.

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. Листинг 1.

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>

Видео по теме: https://www.youtube.com/watch?v=dsuc29P7H68

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться