Mind for Android マニュアル




他のアクティビティの起動


 同じパッケージ内の他のアクティビティを起動したり、あるいは他のパッケージ内のアクティビティを起動する方法について解説します。


明示的なインテントによるもの


■アクティビティを起動

 メイン画面から別の画面に遷移するためには、そのアクティビティ内で画面を全部書き換えるのではなく、別画面用のアクティビティを起動する方法をとります。つまり、画面遷移ごとにそれぞれのアクティビティを起動します。
  • アクティビティを指定するのに、本セクションで解説するようなパッケージ名とクラス名を明示する方法のほかに、
    抽象的・暗黙的なインテントの指定方法もありますが、後者は Mind for Android の現バージョンでは未サポートです。
文法
          -- 他のパッケージを起動する場合 --

<パッケージ名>と <クラス名>で アクティビティを起動 → 真偽

     -- 自身のパッケージ内のサブアクティビティを起動する場合 --

<クラス名>で サブアクティビティを起動 → 真偽

 前者の「アクティビティを起動」は他のパッケージのアクティビティを起動するのに使います。パラメータとして、パッケージ名とクラス名を渡します。たとえば次のように記述します。
      "com.yamada.taro.SampleAactivity"と "SampleAactivity"を アクティビティを起動し 偽?
     ↑パッケージ名                 ↑クラス名
 もし起動する相手が自身のサブアクティビティであるなら、上記のパッケージ名部は、
      私のパッケージ名と "MySubAactivity"を アクティビティを起動し 偽?
     ↑パッケージ名       ↑クラス名
と書けば簡単になります。さらに言えば、上記であるなら、後述する「サブアクティビティを起動」のほうがより簡単になります。

 後者の「サブアクティビティを起動」は自身のパッケージにあるサブアクティビティを起動するのに使います。クラス名だけを指定します。ちなみに「サブアクティビティを起動」は次のように定義された簡単なものです。
サブアクティビティを起動とは (クラス名 → 真偽)
    私のパッケージ名と 交換し アクティビティを起動すること。
 後述するサンプルでは自身のパッケージ内にあるアクティビティの起動なので、「サブアクティビティを起動」のほうを使っています。

 さて、「アクティビティを起動」または「サブアクティビティを起動」によって別の画面が表示された時、親側は子の終了を待たずに処理は次に進む(=子をキックするだけ)ことに注意してください。(いかなるときも、Androidのプログラムでは「待ってから次に進む」ことはしません)
 サブがメインの画面の上にがおおいかぶさるので、メインアクティビティは消えたように見えますが、メインの処理は続行しており、サブアクティビティが終了するとメイン画面が再び見えるようになります。

■アクティビティを起動するサンプルプログラム
 サンプルプログラム群のうち、次のものを使います。
 1アプリで2つのMindソースファイルをアップロードすることに注意してください。
    andrmindSample/
 〜略〜
    |-- Subact/
    |   |-- Subact.src          ←メインアクティビティ(最初にアップロードする
    |   `-- Subactivity.src       ←サブアクティビティ(2番目にアップロードする
 〜略〜
ソースコード (メインアクティビティ)
※ファイル名	Subact/Subact.src

ボタンクリック処理は	本定義  (ボタンID → 戻値)
		_ボタンは ID
	_ボタンに 入れ
	"Subactivity"を サブアクティビティを起動し 偽?
		ならば 「起動失敗」を ちょっと表示し
			0を 返し
			終り
		つぎに
	0を 返す。

メインとは	(・ → ・)
		〜略〜
 (レイアウト)
	リニアレイアウトを生成し _レイアウトに 入れ
	〜略〜
 (ガイド)
	テキストビューを生成し	_ガイドに 入れ
	〜略〜
 (ボタン1)
	ボタンビューを生成し	_ボタン1に 入れ
	〜略〜
	_ボタン1に クリックリスナーを登録し。
ソースコード (サブアクティビティ)
※ファイル名	Subact/Subactivity.src

ボタンクリック処理は	本定義  (ボタンID → 戻値)
		_ボタンは ID
	_ボタンに 入れ
	実行終り定数を 返す。    ←ボタンが押されたら終了する

メインとは	(・ → ・)
		〜略〜
 (レイアウト)
	リニアレイアウトを生成し _レイアウトに 入れ
	〜略〜
 (ガイド)
	テキストビューを生成し	_ガイドに 入れ
	〜略〜
 (ボタン)
	ボタンビューを生成し	_ボタン1に 入れ
	〜略〜
	_ボタン1を クリックリスナーを登録し。

 以下は実行結果です。








■引数を付けてアクティビティを起動

 子アクティビティにデータを渡したい、あるいは子からデータを受け取りたい場合にはこの処理単語を使って起動します。
 また、子アクティビティの終了したタイミングでイベント発生せて、何か次の処理をおこないたい場合(子から戻しデータを受け取ることも含め)にも使われます。
注: 「子アクティビティ終了通知」 のイベントを引き受けるには、親が子を起動するのに単なる「アクティビティを起動」ではなく、こちらの処理単語を使う必要があります。
文法
------------------------------------------
		(親側)
------------------------------------------

<パッケージ名>と
 <クラス名>と
    <識別コード>と <整数引数>と <文字列引数>で 引数を付けてアクティビティを起動 → 真偽

<クラス名>と
    <識別コード>と <整数引数>と <文字列引数>で 引数を付けてサブアクティビティを起動 → 真偽

       (終了待ち)

子アクティビティ終了通知は 本定義 (識別コード、リザルトコード、整数引数、文字列引数 → 戻り値)
	〜イベント処理〜。

------------------------------------------
		(子側)
------------------------------------------

整数引数を取得 → 整数

文字列引数を取得 → 文字列

<整数引数>と <文字列引数>で 戻り値を設定 → ・

■引数を付けてアクティビティを起動するサンプルプログラム
 サンプルプログラム群のうち、次のものを使います。
 1アプリで2つのMindソースファイルをアップロードすることに注意してください。
    andrmindSample/
 〜略〜
    |-- SubactEx/
    |   |-- SubactEx.src         ←メインアクティビティ(最初にアップロードする
    |   `-- SubactivityEx.src      ←サブアクティビティ(2番目にアップロードする
 〜略〜
ソースコード (メインアクティビティ)
※ファイル名	SubactEx/SubactEx.src

ガイド記憶は	変数。

子アクティビティ終了通知は 本定義 (識別コード、リザルトコード、整数引数、文字列引数 → 戻値)
		_識別コードは 変数
		_リザルトは  変数
		_整数引数は	変数
		_文字列引数は 文字列
		_バッファは	文字列実体 長さ 12桁
	※
  _数値を追加とは (数値 → ・)
	_バッファをつかい 文字列変換し ガイド記憶に 文字を追加すること
	※
  _文字を追加とは (文字列 → ・)
	ガイド記憶に 文字を追加すること
	※
  本体とは
	_識別コードと _リザルトと _整数引数と _文字列引数に 入れ
	「&改行&」を							_文字を追加し
	「  サブからの戻り値:&改行&」を				_文字を追加し
	「    識別Code=」を ガイド記憶に 文字を追加し	_識別コードを	_数値を追加し
	「&改行&」を	_文字を追加し
	「    リザルト=」を ガイド記憶に 文字を追加し	_リザルトを	_数値を追加し
	「&改行&」を	_文字を追加し
	「    整数=」を   ガイド記憶に 文字を追加し	_整数引数を	_数値を追加し
	「&改行&」を	_文字を追加し
	「    文字列=」を  ガイド記憶に 文字を追加し	_文字列引数を	_文字を追加し
	0を 返す
	。

ボタンクリック処理は	本定義  (ボタンID → 戻値)
		_ボタンは ID
	_ボタンに 入れ
	"SubactivityEx"と
	 1と 123と "ABC"で 引数を付けてサブアクティビティを起動し 偽?
		ならば 「起動失敗」を ちょっと表示し
			0を 返し
			終り
		つぎに
	0を 返す。

メインとは	(・ → ・)
		_レイアウトは	ID
		_ガイドは	ID
		_ボタン1は	ID
 (レイアウト)
	リニアレイアウトを生成し _レイアウトに 入れ
	〜略〜
 (ガイド)
	テキストビューを生成し	_ガイドに 入れ
	〜略〜
 (ボタン1)
	ボタンビューを生成し	_ボタン1に 入れ
	〜略〜
	_ボタン1に クリックリスナーを登録し。
ソースコード (サブアクティビティ)
※ファイル名	SubactEx/SubactivityEx.src

ボタンクリック処理は	本定義  (ボタンID → 戻値)
		_ボタンは ID
	_ボタンに 入れ
	456と 「DEF」を 戻り値を設定し
	実行終り定数を 返す。

メインとは	(・ → ・)
		_レイアウトは	ID
		_ガイドは	ID
		_ボタン1は	ID
		_バッファは	文字列実体 長さ 12桁
 (レイアウト)
	リニアレイアウトを生成し _レイアウトに 入れ
	〜略〜
 (ガイド)
	テキストビューを生成し	_ガイドに 入れ
	〜略〜
 (ボタン)
	ボタンビューを生成し	_ボタン1に 入れ
	〜略〜
	_ボタン1を クリックリスナーを登録し。

 以下は実行結果です。






(親側)
 親側で子を呼び出すのに 「引数を付けてアクティビティを起動」 または 「引数を付けてサブアクティビティを起動」 を使います。単なる 「アクティビティを起動」 、「サブアクティビティを起動」 に比べてバラメータが多くなっています。
 増えたのは、
    ・・・・・・ <識別コード> <整数引数> <文字列引数>
の3つです。
 まず<識別コード>は整数で、この先の「子アクティビティ終了通知」でイベントを受けた際に、複数ありえる子アクティビティのうち、どこからのイベント発生なのかを識別する用途に使います。もし子アクティビティが1つしかないのであれば例のように 1 など適当な値を指定しておけば良いでしょう。
 <整数引数>と<文字列引数>は、子アクティビティに渡す引数です。(Android OSの仕様としてはより柔軟な渡し方ができるのですがMindではそれぞれ1つに制限しています)
 整数引数が1つあれば間に合う用途では文字列引数は不要ですが、それであってもスタック積みは必要のため、ダミーで「空列」などと書いておいてください。逆に、整数は使わずに文字列だけ渡すのであれば、整数値としてはダミーで 0 などを積んでおいてください。いずれにしても、必ず整数と文字列を1つずつを積んでください。
 前記実行例の最後の画面は、メインアクティビティにて子の終了を検出して情報を表示しています。このように、子の終了と同時に何らかの処理をおこないたい場合は  「子アクティビティ終了通知」  という本定義にイベント処理を記述します。(「子の終了を待つ」  のではなく、「子の終了時のイベントで処理する」  という感覚です
注: 「アクティビティを起動」または「サブアクティビティを起動」ではこの終了イベントは発生しません。「引数を付けて・・・起動」のほうを使ってください。
 サブアクティビティが終了したタイミングで、メインアクティビティ側の処理単語 「子アクティビティ終了通知」 が呼び出されます。ここにはたくさんのパラメータが渡されます。
 このうち、<識別コード>は先に説明したように複数の子プロセスからイベントが上がる可能性があるケースでそれらを識別するのに使われます。識別が不要ならダミーとして 1 などを指定しておいてください。
 同じく終了通知の<リザルトコード>は、コンソールアプリケーションで言うところの終了コードのようなものです。Mindで書いたアクティビティからは固定的に 3000 を返すようにしていますが、Mind記述でない一般のアクティビティ呼び出しでAndroidの標準的なリザルトコードが返されるはずで、その場合は利用する意味があるかも知れません。いずれにしても、リザルトコードの値そのものはアプリケーション依存なので、呼び出し先のアクティビティの仕様を調べてお使いください。ちなみに文献によると、「OK」の意味で -1 が、「Cancel」の意味で 0 が、それ以外のユーザ定義では 1 以降が使われるようです。

(子側)
 子が起動した際(多くの場合「メイン」の定義中で)、「整数引数を取得」 または 「文字列引数を取得」 と記述することで、親から渡された引数を得ることができます。
 逆に、子から親に値を返したい場合は 「戻り値を設定」 を使ってください。整数と文字列それぞれ1つを返すことができますが、どちらか一方だけあれば良いような場合は、整数を返す必要が無いのなら 0 を、文字列を返す必要が無いのなら「空列」などと記述してださい。




Copyright(C) 2000 Scripts Lab. Inc.