В этой части мы добавим в проект ещё одну форму и будем открывать её по нажатию кнопки
Здесь выделены добавленные строки. Итак, мы сделали форму слушателем события нажатия на кнопку (имплементировав
Разметку сделаем простейшую:
В классе перегрузим метод
Кроме того, нужно упомянуть о новой форме в
Кстати, в новых версиях ADT можно добавлять активности не
руками в XML, а с помощью какого-никакого графического интерфейса во
вкладке Application —> Application Nodes.
Запускаем - работает. Теперь объясним, что сделали.
Однако, нам всего этого не нужно, а нужно, чтобы обработчиком Intent-а была сама форма
Вызов функции startActivity(intent) запускает операцию
У класса
Теперь модифицируем обработчик
Итак, мы передали в наш Intent дополнительные параметры. Теперь мы получим их в
Теперь, после нажатия на кнопку Run мы видим следующее:
Run
.
Также сделаем так, чтобы параметры, которые были введены в первой
форме, передавались во вторую (они там ещё пригодятся). Однако, ничего
страшного мы пока с ними делать не будем, а просто напишем "Введены
такие-то числа"Обработка нажатия кнопки
Напишем вStartActivity.java
следующее:StartActivity.java
package demo.android.life; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class StartActivity extends Activity implements OnClickListener { Button mButton; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mButton = (Button) findViewById(R.id.run); mButton.setOnClickListener(this); } public void onClick(View v) { Toast.makeText(this, "It works", Toast.LENGTH_SHORT).show(); } }
OnClickListener
), и подписались на это событие для кнопки mButton
(с помощью setOnClickListener
).
Для того, чтобы проверить, что всё правильно, в методе, который
обрабатывает событие, показываем оповещение (Toast). Запускаем -
работает.Добавление активности
Для того, чтобы создать в приложении форму, необходимо создать два файла — XML-разметку формы(run.xml
) и Java-класс формы (RunActivity.java
).Разметку сделаем простейшую:
run.xml
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/message" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </FrameLayout>
onCreate
, в котором свяжем форму с этой разметкой:RunActivity.java
package demo.android.life; import android.app.Activity; import android.os.Bundle; public class RunActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.run); } }
AndroidManifest.xml
. Для этого в раздел application
добавляем следующее:<activity android:name="RunActivity"></activity>
Переход на другую активность
Нам хочется, чтобы это активностьRunActivity
появлялась после нажатия кнопки Run окна StartActivity
. Пишем в обработчике этой кнопки следующее:StartActivity.java
public void onClick(View v) { Intent intent = new Intent(); intent.setClass(this, RunActivity.class); startActivity(intent); finish(); }
Intent
Intent
- это описание некоторого действия,
которое должно совершить приложение. Этим действием может быть переход к
другому окну, совершение исходящего вызова, открытие списка контактов и
т.д.. У Intent-а есть два основных атрибута:- action - функция, которую надо выполнить. Задается в виде константы:
ACTION_VIEW
,ACTION_DIAL
и т.д. - data - аргумент этой функции, записанный в виде URI
VIEW_ACTION content://contacts/people/1
соответствует выводу информации о контакте с идентификатором 1, а ACTION_DIAL tel:123
- выводу окна вызова с набранными цифрами 123
.Однако, нам всего этого не нужно, а нужно, чтобы обработчиком Intent-а была сама форма
RunActivity
. Для этого мы используем функцию setClass
(или есть ещё такая setClassName
).Вызов функции startActivity(intent) запускает операцию
intent
(т.е. открывает окно), finish()
завершает текущую задачу (т.е. закрывает окно StartActivity
).Передача данных между активностями
Итак,RunActivity
появляется, но там ничего нет. Рассмотрим, каким образом можно передать параметры, введенные в StartActivity
, в активность RunActivity
.У класса
Intent
, помимо основных атрибутов, есть ещё и второстепенные. В частности, есть такой атрибут extras
, где в виде хеша (Bundle
) хранятся любые дополнительные параметры. Им-то мы и воспользуемся. Итак, добавим в класс RunActivity.java
следующие константы (ключи хеша):RunActivity.java
public static final String EXT_COLS = "cols"; public static final String EXT_ROWS = "rows"; public static final String EXT_CELLS = "cells";
onClick
в классе StartActivity.java
, чтобы он выглядел такStartActivity.java
public void onClick(View v) { EditText rowsEditor = (EditText)findViewById(R.id.rows_count); EditText colsEditor = (EditText)findViewById(R.id.columns_count); EditText cellsEditor = (EditText)findViewById(R.id.cells_count); int cols = Integer.parseInt(colsEditor.getText().toString()); int rows = Integer.parseInt(rowsEditor.getText().toString()); int cells = Integer.parseInt(cellsEditor.getText().toString()); Intent intent = new Intent(); intent.setClass(this, RunActivity.class); intent.putExtra(RunActivity.EXT_COLS, cols); intent.putExtra(RunActivity.EXT_ROWS, rows); intent.putExtra(RunActivity.EXT_CELLS, cells); startActivity(intent); finish(); }
RunActivity
в методе onCreate
: RunActivity.java
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.run); Bundle extras = getIntent().getExtras(); int cols = extras.getInt(EXT_COLS); int rows = extras.getInt(EXT_ROWS); int cells = extras.getInt(EXT_CELLS); TextView message = (TextView)findViewById(R.id.message); message.setText("Rows: " + rows + "\nColumns: " + cols + "\nCells: " + cells); }
Комментариев нет:
Отправить комментарий