Android studio переход между формами

Знакомство с Android. Часть 2: Переходы между формами

Итак, продолжим. В этой части мы добавим в проект ещё одну форму и будем открывать её по нажатию кнопки Run. Также сделаем так, чтобы параметры, которые были введены в первой форме, передавались во вторую (они там ещё пригодятся). Однако, ничего страшного мы пока с ними делать не будем, а просто напишем «Введены такие-то числа».

Обработка нажатия кнопки

Напишем в StartScreen.java следующее (строки, которые мы добавляем, выделены другим цветом):

Здесь выделены добавленные строки. Итак, мы сделали форму слушателем события нажатия на кнопку (имплементировав OnClickListener), и подписались на это событие для кнопки mButton (с помощью setOnClickListener). Для того, чтобы проверить, что всё правильно, в методе, который обрабатывает событие, изменяем заголовок кнопки. Запускаем — работает.

Переход на другую форму

Итак, добавляем еще одну форму. Для этого надо создать два файла — разметки формы(run.xml) и класса формы (RunScreen.java).

Разметку сделаем простейшую:

В классе добавим onCreate, в котором свяжем форму с этой разметкой:

Кроме того, нужно упомянуть о новой форме в AndroidManifest.xml. Для этого в раздел application добавляем следующее:

Кстати, в новых версиях ADT можно добавлять активности не руками в XML, а с помощью какого-никакого графического интерфейса во вкладке Application —> Application Nodes.

Переход на другую активность

Нам хочется, чтобы это окно появлялось после нажатия кнопки «Run». Пишем в обработчике этой кнопки следующее:

Запускаем — работает. Теперь объясним, что сделали.

Intent

Intent — это описание некоторого действия, которое должно совершить приложение. Этим действием может быть переход к другому окну, совершение исходящего вызова, открытие списка контактов и т.д.. У Intent-а есть два основных атрибута:

  • action — функция, которую надо выполнить. Задается в виде константы: ACTION_VIEW, ACTION_DIAL и т.д.
  • data — аргумент этой функции, записанный в виде URI

Например, сочетание VIEW_ACTION content://contacts/people/1 соответствует выводу информации о контакте с идентификатором 1, а ACTION_DIAL tel:123 — выводу окна вызова с набранными цифрами 123.

Однако, нам всего этого не нужно, а нужно, чтобы обработчиком Intent-а была сама форма RunScreen. Для этого мы используем функцию setClass (или есть ещё такая setClassName).

Вызов функции startActivity(intent) запускает операцию intent (т.е. открывает окно), finish() завершает текущую задачу (т.е. закрывает окно StartScreen).

Передача данных между окнами

Итак, окно RunScreen появляется, но на нем ничего нет. Рассмотрим, каким образом можно передать параметры, введенные в StartScreen, в окно RunScreen.

Читайте также:  Xml формат чем открыть андроид

У класса Intent, помимо основных атрибутов, есть ещё и второстепенные. В частности, есть такой атрибут extras, где в виде хеша (Bundle) хранятся любые дополнительные параметры. Им-то мы и воспользуемся. Итак, добавим в класс RunScreen.java следующие константы (ключи хеша):

Теперь модифицируем обработчик onClick в классе StartScreen.java, чтобы он выглядел так:

Итак, мы передали в наш Intent дополнительные параметры. Теперь мы получим их в RunScreen в методе onCreate:

Теперь, после нажатия на кнопку Run мы видим следующее:

Заключение

Итак, мы добавили в наше приложение ещё одну форму, создали переход на неё и передали параметры из первой формы.

Источник

Android studio переход между формами

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

Создаем новый проект в Andoid Studio, все названия традиционно оставляем по умолчанию. Итак, сейчас мы имеем всего одно Activity — MainActivity, 1 файл разметки интерфейса activity_ main .xml, описывающий наше MainActivity . Создадим еще одно Activity . Слева, в окне, отображающем структуру приложения, выделяем папку приложения app — New — Java Class:

Выбираем где именно поместить новый созданный класс: app\src\main\java:

В следующем окне вводим имя создаваемой активности: SecondActivity и жмем ОК. Слева в панели сразу откроется папка, где создано новое Activity, проследите, чтобы обе активности были в одной папке. Если у вас вышло вот так:

то просто перетащите файл SecondActivity в папку с MainActivity.

Теперь нужно создать файл разметки для SecondActivity. Делаем это аналогично созданию активности: в окне слева раскрываем папку res и нажимаем правой кнопкой мыши на подпапку layout: жмем New — Layout resourse file. В открывшемся окне вводим имя: second и жмем ОК. Все, все необходимые файлы созданы.

Теперь нужно привязать созданный файл разметки интерфейса second.xml к SecondActivity. Открываем SecondActivity и выполняем эту привязку:

Как видите, здесь ничего сложного. Устанавливаем наследование нашим новым классом extends Activity, создаем метод onCreate. Чтобы не писать его вручную, делаем так: на верхней панели ищем кнопку Code — Override Methods, начинаем вводить название OnCreate, подсказка нам его быстренько выдаст, и жмем ОК. Настраиваем вид контента окна с нашего файла second.xml: setContentView(R.layout.second).

Теперь начнем реализацию нашей мечты: при нажатии на кнопку на одном экране — происходит переход на другой экран с другим содержимым.

Открываем файл activity_main.xml и создаем там кнопку, при нажатии на которую будет происходить переход:

Теперь нужно описать процесс нажатия, кликнем на надпись «Click» в последней строчке и нажмем комбинацию клавиш Alt + Enter:

Читайте также:  Андроид x86 для ноутбука

и жмем еще раз Enter по строчке «Create «Click(View)» in «MainActirvity»«. Таким образом мы автоматически добавили метод обработки щелчка в MainActivity.

Теперь в созданном методе » Click » нужно написать код, который будет производить переход при нажатии:

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

В принципе все. Давайте только заполним хоть каким то содержимым наш SecondActivity, чтобы переход был более очевидным.

Откроем созданный нами файл second.xml. Ну а тут свобода! Добавьте то, что сами желаете увидеть при переходе на эту активность. Например я добавлю туда элемент

с надписью «Приехали!» и размещу ее в центре:

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

После освоения этого урока сразу советую вам заглянуть сюда, а также сюда . Удачи!

Источник

Android Studio: Переключение между Activity

Рабочая среда Android Studio позволяет протестировать готовое приложение, для этого Вам необходимо создать виртуальное устройство. Для этого перейдите в AVD Manager.

Назовём рабочую область BackActivity.

Теперь мы возвращаемся к MainActivity, и к кнопке «Старт» пишем обработчик, для начала добавим строку:

Можно и в режиме дизайна, указать метод onClick:

Сразу укажем кнопке ID (buttonBack).

После, открываем MainActivity.java, и в метод Create добавляем строку:

Button buttonBack = (Button)findViewById(R.id.buttonBack);

Далее необходимо навести каретку на (Button), вызвать контекстное меню зажав клавиши Alt+Enter и выбрать импорт класса.

Теперь, сразу после, добавим строку:

Программа нам говорит об ошибке, чтобы её исправить нужно отредактировать строку:

public class MainActivity extends AppCompatActivity <

и заменить её на:

public class MainActivity extends AppCompatActivity implements View.OnClickListener<

Теперь добавляем следующие строки:

И импортируем класс Intent (в противном случае выдаст ошибку Cannot find symbol class Intent).

Шалость удалась, у нас есть работающая кнопка, которая переносит нас на новую Activity. Наполнять Activity содержимым буду уже в следующих обзорах.

Источник

Somethings

problems and solutions

четверг, 16 октября 2008 г.

Знакомство с Android. Часть 2: Переходы между формами

Обработка нажатия кнопки

StartActivity.java

Добавление активности

run.xml

RunActivity.java

Переход на другую активность

StartActivity.java

Intent

Передача данных между активностями

RunActivity.java

StartActivity.java

RunActivity.java

Заключение

19 комментариев:

Добрый день. У меня проблема. Объясните пожалуйста, Intent intent = new Intent() нужно прописывать в StartScreent.java? Если да, то Intent подчеркивается как ошибка, при наведении пишет следующее — Intent cannot be resolved to a type. И вопрос второй, в AndroidManifest.xml нужно прописывать сразу после предыдущей ?

2 mik:
А import android.content.Intent; в StartScreen есть? Если нет, то стоит добавить. Кстати, смотрите внимательнее, что советует eclipse, иногда он бывает прав 🙂
Второго вопроса не поняла.

Читайте также:  Читалка для андроид без вирусов

Дарья, спасибо огромное, Ваш совет помог. Я как раз не прописал android.content.Intent, поэтому и выдавало ошибку. А второй вопрос я бы и сам не понял)) почему-то пол предложения куда-то потерялось, но это не важно, все заработало. Еще раз спасибо

Спасибо большое за материал.

Так как только изучаю android программирование, пишу программку по книге. Возникла проблема с переходом на другую форму или с открытием меню — выскакивает ошибка и force close. По идее что-то не так в манифесте, но вроде проверял несколько раз и все правильно. Обработчики согласно книжке тоже выполнены верно. Что может быть не так?

Тоже проблема выскакивает Force close при нажатии на кнопку, методом проверок определил что срабатывает при setText в RunScreen

EditText rowsEditor = (EditText)findViewById(R.id.RowsEditor);
А не здесь ли? Лишь при добавлении этих трех строк процесс завершается. Без них все ок (последующий код, естественно, закомментирован). В чем проблема не могу понять.

Всё работает! надо только думать.
спасибо Даша

Eclipse выводит следующую ошибку — RunScreen cannot be resolved to a type

Действительно, при нажатии на кнопку Run приложение вылетает, хотя все с точностью скопировано отсюда. В чем может быть проблема?

Дебагер вылетает на строчке startActivity(intent);

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

Нашел в чем загвоздка была )

в AndroidManifest.xml не там вставил строчку runactivity :-[

На iPhone попроще прогать будет, хотя может я просто еще не привык к xml-разметке и java ))

Дарья, подскажите пожалуйста, EXT_COLS = «cols»; это строка, как тогда при выводе переменной cols, которая задана int cols = extras.getInt(EXT_COLS); должно выводиться количество колонок, в «\nColumns: » + cols? Там же ведь должно получиться «Columns: cols»

То есть, вопрос в том, в какой момент EXT_COLS переопределяется и связывается с количеством колонок?

Дарья спасиб за статьи.

Только на мой вкус и цвет, лучше биндить события таким образом как у вас. (Через implements OnClickListener) так как часто возникают ситуации когда несколько кнопок надо прибиндить.

Поэтому используется немного другой подход
А именно реализация интерфейса налету.

Например вот так:

final Activity self = this;

mButton.setOnClickListener(new OnClickListener() <
@Override
public void onClick(View v) <
Toast.makeText(self, «It works», Toast.LENGTH_SHORT).show();
>>);

Да и код на мой взгляд чище и понятнее становится.

Отличная статья.
От себя хотелось бы добавить: как вариант передачи сложных объектов, серилизация ProtoBuf и преобразование в byte[].

Большущее спасибо за ZIP. Два дня мучился с Layout, а оказалось, что нужно было писать заклинания в Манифесте.

Здравствуйте, сделал все по инструкциям и возникла следующая проблема — на устройстве создается 2 иконки приложения вместо одной.Что же делать?

Источник

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