6 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как Android запускает MainActivity

Запуск другой Activity — второго окна android-приложения

В этом уроке

Вы также должны прочитать

После завершения предыдущего урока, у вас есть приложение, которое показывает активити (один экран) с текстовым полем и кнопкой. В этом уроке вы добавим код к MainActivity , который запустит новую активити , когда пользователь нажмет на кнопку Отправить..

Ответить на кнопку Отправить

Чтобы ответить на событие нажатия кнопки, откройте fragment_main.xml файла макета и добавьте android:onClick атрибут к элементу:

android:onClick значение атрибута, «sendMessage» , это имя метода в вашей активити , который система вызывает когда пользователь нажимает кнопку.

Откройте MainActivity класс (расположенный в каталоге проекта src/ ) и добавьте соответствующий метод:

Чтобы система смогла найти этот метод с именем, заданным в android:onClick , сигнатура должна быть именно такой, как вы видели. В частности, метод должен:

  • Быть public
  • Имейте void в качестве возвращаемого значения
  • Иметь View в качестве единственного параметра (это будет View , на котором нажали)

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

Создать Intent

Intent это объект, который обеспечивает связывание отдельных компонент во время выполнения (например, двух активити ). Intent представляет «намерение что-то сделать». Вы можете использовать интент для широкого круга задач, но чаще всего они используются, чтобы начать другую активити .

Внутри sendMessage() метода, создайте Intent для запуска активити под названием DisplayMessageActivity :

Для этого требуется импортировать Intent класс:

Полезный совет: В Eclipse, нажмите Ctrl + Shift + O для импортирования недостающих классов (Cmd + Shift + O на Mac). В Android Studio команда для импорта Alt+Enter.

Конструктор, используемый здесь принимает два параметра:

  • Context в качестве первого параметра( this используется, поскольку Activity класс является подклассом Context )
  • Class компонента приложения, в который система должна доставить Intent (в данном случае активность, которая должна быть запущена)

Отправка intent в другие приложения

Intent, созданный в этом уроке считается явным, поскольку Intent указывает точный компонент приложения, в которое интент следует отправить. Тем не менее, интенты также могут быть неявными, в этом случае Intent не указывает нужный компонент, позволяя любой программе установленной ​​на устройстве отвечать на интенты, пока она удовлетворяет спецификациям мета-данных действия, задаваемыми в различных Intent параметрах. Для получения дополнительной информации читайте курс Взаимодействие с другими приложениями.

Примечание: Ссылка на DisplayMessageActivity вызовет ошибку, если вы используете интегрированную среду разработки, такую как Eclipse например, потому что класс еще не существует. Игнорируйте ошибку на данный момент; вы скоро создадите класс.

Intent не только позволяет начать другую Activity, но также может выполнять связь данных в Activity. В sendMessage() методе, используйте findViewById() для получения EditText элемента и добавьте его текстовое значение в Intent:

Читать еще:  Как объединить два несмежных раздела жёсткого диска

Примечание: Вам необходим оператор импорта для android.widget.EditText . Вы определите EXTRA_MESSAGE константу буквально сейчас.

Intent может нести коллекцию различных типов данных в виде пары ключ-значение, называемых Extras. Метод putExtra() принимает имя ключа в первом параметре и значение во втором параметре.

Для того, чтобы Activity смогла запросить дополнительные данные, вы должны определить ключ для дополнений вашего интента, используя общедоступную константу. Так что добавьте EXTRA_MESSAGE определение в начало MainActivity класса:

Вообще это хорошая практика, определять ключи для Intent Extras используя имя пакета вашего приложения в качестве префикса. Это гарантирует, что они уникальны, в случае когда ваше приложение взаимодействует с другими приложениями.

Запуск второй Activity

Для запуска активити, вызовите startActivity() и передайте в него ваш Intent . Система получает этот вызов и запускает экземпляр Activity указанный в Intent .

С помощью этого нового кода, полный sendMessage() метод, который вызывается кнопкой Отправить теперь выглядит следующим образом:

Теперь вам нужно создать DisplayMessageActivity класс для того, чтобы это работало.

Создание второй Activity

Для создания новой Activity в Android Studio:

В главном меню выберите File>New>Activity>Blank Activity.

Заполните поля в окне мастера создания активити:

  • Activity Name: DisplayMessageActivity
  • Layout Name: activity_display_message
  • Title: Моё сообщение
  • Hierarchial Parent: com.example.myfirstapp.MainActivity

Остальные поля оставьте по умолчанию. Нажмите Finish.

Для создания новой Activity в Eclipse:

  • Нажмите Newна панели инструментов.
  • В появившемся окне, откройте Android папку и выберите Android Activity. Нажмите Next.
  • Выберите BlankActivity и нажмите Next.
  • Заполните информацию о Activity:
    • Project: MyFirstApp
    • Activity Name: DisplayMessageActivity
    • Layout Name: activity_display_message
    • Fragment Layout Name: fragment_display_message
    • Title: Моё сообщение
    • Hierarchial Parent: com.example.myfirstapp.MainActivity
    • Navigation Type: None

    Нажмите Finish.

Рисунок 1. Мастер новой активити в Eclipse.

Если вы используете инструменты командной строки, создайте новый файл с именем DisplayMessageActivity.java в проекте в src/ каталоге, рядом с оригиналом MainActivity.java файлом.

Откройте DisplayMessageActivity.java файл. Если вы использовали Android Studio или Eclipse для создания этой Activity:

  • Класс уже включает в себя реализацию требуемого onCreate() метода. Вы обновите реализацию этого метода позже.
  • Есть также реализация onCreateOptionsMenu() метода, но вам это не будет нужно в данном приложении, так что вы можете удалить его.
  • Есть также реализация onOptionsItemSelected() , который обрабатывает поведение панели действий для кнопки Вверх . Оставьте его как есть.
  • Может быть также PlaceholderFragment класс, который расширяет Fragment . Вам не нужен будет этот класс в окончательном варианте этой активити .

Фрагменты разбивают функциональность приложений и пользовательский интерфейс на модули, которые можно будет повторно использовать. Для более подробной информации о фрагментах см.Руководство по Фрагментам. Окончательный вариант этой активити не использует фрагменты.

Примечание: Ваша активити может выглядеть иначе, если вы не использовали последнюю версию ADT плагина. Убедитесь, что вы установили последнюю версию ADT плагина для завершения этого курса.

DisplayMessageActivity класс должен выглядеть следующим образом:

Как Android запускает MainActivity

Данный метод описывает процесс создания нового Activity, класса, кнопки позволяющей произвести переход с текущего на созданный Activity. Подразумевается, что проект уже создан (в Eclipse) и в данный проект необходимо добавить новое Activity, необходимо создать два файла, в папку reslayoutactivity_second.xml:

  • ПКМ на папке res — New — Android XML file
  • В открывшемся окне необходимо выбрать Resource Type — Layout
  • Указать имя файла
  • Указать корневой элемент, по умолчанию LinearLayout
  • Finish

Второй файл, это класс посредством кторого будет отражено новое Activity srckzsys_adminswitchactivitySecondActivity.java:

  • ПКМ на папке res — New — Class
  • В поле Name необходимо указать имя нового класса SecondActivity
  • Finish

Подправить файл AndroidManifest.xml, добавив в него строки перед тегом :

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

public class SecondActivity extends Activity<

далее необходимо добавить метод onCreate, расширить класс SecondActivity, после правки код выглядит так:

import android.app.Activity;
import android.os.Bundle;

public class SecondActivity extends Activity<

@Override
protected void onCreate(Bundle savedInstanceState) <
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
>

Далее необходимо создать кнопку, которая позволит с первого Activity (activity_main.xml) совершить переход на второе (activity_second.xml), добавляем кнопку в activity_main.xml:

Далее открываем srckzsys_adminswitchactivityMainActivity.java в который вставляем обработчик для кнопки:

@Override
protected void onCreate(Bundle savedInstanceState) <
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button swith = (Button)findViewById(R.id.button1);
swith.setOnClickListener(new OnClickListener() <

@Override
public void onClick(View v) <
// TODO Auto-generated method stub
Intent SecAct = new Intent(getApplicationContext(), SecondActivity.class);
startActivity(SecAct);
>
>);
>

Готово, запускаем проект, проверяем.

Комментарии

Где используется, пример кода можете привести?

Здравствуйте, Вам необходимо добавить код в тот класс (активити) с которого будет осуществляться переход, добавить обрабоччик для кнопки с кодом:

Android Study

СОЗДАНИЕ ПРИЛОЖЕНИЙ

Урок 12. Из одного Activity в другое

Урок 12. Из одного Activity в другое

На данный момент если вы запустите наше приложение у вас не будет возможности попасть на экран, который выводит вопрос и предлагает три варианта ответа (activity_game.xml). Нам необходимо сделать так, чтобы по нажатии кнопки «Play» на экране activity_main.xml мы попадали на экран с игрой activity_game.xml. Открывайте проект с нашей математической игрой и следуйте по пунктам:

  • Открываем файл acitivity_main.xml (либо двойным щелчком в проводнике проекта, либо щелчком на вкладку в случае, когда она не активна);
  • Теперь, как мы уже делали это раньше (с текстовыми элементами) нам нужно назначить id кнопке Play. Кликните по кнопке Play или найдите её в «Componenttree» и в свойствах кнопки найдите ID и назначьте там «buttonPlay»;

  • Теперь перейдите в MainActivity.java.
  • В теле метода onCreate, сразу же после строки с методом setContentView добавьте выделенную строку:
  • Позже мы подробнее проанализируем весь код целиком, а пока нужно знать, что мы этой строкой кода создаём ссылочную переменную (объект) и присоединяем к кнопке Play. Так же как мы делали раньше, после добавления этой строки необходимо будет импортировать класс Button в наш проект комбинацией клавиш Alt+Enter.
  • Теперь кое-что новенькое. Мы дадим кнопке способность «слушать» клик пользователя. Сразу же после предыдущего кода напишите это:

Заметьте, что ключевое слово this подчеркнуто красным цветом, что указывает нам на ошибку. В дальнейших уроках будет подробное объяснение почему так происходит. Оставим это пока в уме. Нам нужно внести изменения в наш код и разрешить использование интерфейса (очень мощный инструмент в программировании, о нём тоже попозже, дабы не захламлять голову большим количеством теории без практического применения), позволяющего нам добавлять функциональные возможности, такие как «прослушивание» щелчков по кнопкам. Отредактируйте эту строку:

Теперь вся эта строка подчеркнута красным. Добавив implements View.onClickListener мы реализовали интерфейс. Интерфейс – это как класс, но со своими правилами. Правило интерфейса onClickListener гласит, что мы обязаны реализовать/использовать один из его методов. Давайте сделаем это.

  • Обратите внимание на открывающую фигурную скобку (<) и закрывающую (>). Они обозначают начало и конец метода. Наш метод пуст, и он ничего не делает, но этого вполне достаточно для соответствия правилу интерфейса onClickListener. Красная строка уйдёт. Убедитесь, что вы ввели следующий код после закрывающей фигурной скобки метода onCreate, но перед закрывающей фигурной скобкой нашего класса MainActivity:

Теперь следует написать код в этом методе и привнести жизнь нашей кнопке:

Добавленный код выделен жирным. Не забудьте импортировать класс Intent.

  • Пока этот код для нас немного непонятен. Отгадка кроется в методе startActivity и знакомом нам термине GameActivity. Обратите внимание, что мы присваиваем что-то переменной «i». Понимание всего происходящего придёт после уроков, где мы будем разбирать понятие Объектно-Ориентированного Программирования. А сейчас давайте запустим наше приложение. Если всё сделано правильно, то вы перед собой должны увидеть это:

При нажатии кнопки Play на экране меню (activity_main) вы перейдёте на экран с игровым процессом (activity_game). Если этого не произошло, внимательно прочтите статью еще раз и попробуйте найти какое-либо несоответствие. Последовательность строчек в коде очень важна, также как и расстановка фигурных скобок «<>». Всё должно соответствовать нашему описанию. Но если проблема не будет найдена вами, вы можете связаться со мной посредством комментария и подробно объяснить возникшее перед вами затруднение. Я попробую вам помочь.

Разбираемся в коде

Файл MainActivity.java – весь код целиком:

Разберём по кусочкам:

В первом куске мы видим определение имени нашего пакета и импортируем нужные нам библиотеки из Android API для взаимодействия в коде. Далее:

Тут происходит объявление нашего класса MainActivity с реализацией интерфейса View.OnClickListener, который даёт нам возможность засечь нажатие по кнопке. Далее:

Сперва строкой super.onCreate(savedInstanceState); мы просим выполнить некоторые вещи, которые скрыты в коде метода onCreate. По сути этой строкой мы задаём начальные настройки Activity. Строкой setContentView(R.layout.activity_main); устанавливаем созданный нами пользовательский интерфейс в файле activity_main.xml.

Далее мы создаём ссылку на нашу кнопку с ID buttonPlay:

И придаём ей возможность «слушать» нажатие по ней:

В конце, в методе onClick мы с помощью класса Intent отправляем пользователя в класс GameActivity, который в своём коде устанавливает в качестве экрана пользовательский интерфейс, созданный нами в файле activity_game.xml:

Теперь, когда мы немного изучили азы обработки событий, нам нужно изучить больше язык Java. Переходите к следующему уроку – в нём мы рассмотрим еще несколько операторов (помимо тех, что мы уже знаем), используя которые мы научим наше приложение не только задавать вопрос пользователю, но и реагировать на ответ.

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector