Hatena::Groupandroid

lnzntの Android 日記 このページをアンテナに追加 RSSフィード

2012年04月07日(土)

別の Activity を起動する

18:07 | 別の Activity を起動する - lnzntの Android 日記 を含むブックマーク はてなブックマーク - 別の Activity を起動する - lnzntの Android 日記 別の Activity を起動する - lnzntの Android 日記 のブックマークコメント

ボタンを押すと別のアクティビティを開始するように Hello アプリケーションを改造してみたいと思います。

SubActivity を作る

まず、もう一つのアクティビティを作ります。

Eclispe のパッケージエクスプローラで、「HelloActivity.java」をコピー(Ctrl-C)して、そのまま貼りつけ(Ctrl-P)ます。新しい名前を問うダイアログが出るので「SubActivity」を入力します。

以下のような SubActivity.java ができるので、View を「R.layout.main」から「R.layout.sub」に変更して保存(Ctrl-S)します。

package com.example;

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

public class SubActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sub);  // R.layout.main から R.layout.sub に変更
    }
}

次に res/layout/main.xml をコピー&ペーストして「sub.xml」を作ります。

sub.xml を「XML Editor (Design タブ)」で開いて、TextView の android:text 属性を「@string/hello」から「@string/goodbye」に変更して保存(Ctrl-S)します。

20120407182456

次に res/values/strings.xml を「Android Common XML Editor (Resources タブ)」で開いて「Add」をクリックします。リソースの種類を問うダイアログが出るので「String」を選択します。

Name に「goodbye」、value に「さようなら」を入力して保存(Ctrl-S)します。

20120407182457

これでアクティビティ(とビュー)ができました。

ボタンを追加する

まず、View にボタンを追加します。

res/layout/main.xml を「Android Common XML Editor (Graphic Layout タブ)」で開きます。

左側の Palette の Form Widgets にある「Button」を右側のビューにドラッグ&ドロップします。

20120407183956

res/layout/main.xml を「XML Editor (Design タブ)」で開いて、Button/@android:text の値を「Button」から「@string/button1_label」に変更します。

(先程と同じ要領で res/values/strings.xml に、Name「button1_label」、Value「それでは」で String リソースを追加してください)

main.xml の Button/@android:id の値は「@+id/ ...」記法で書かれた、このボタンウィジェットの ID です。

20120407184052

ボタンが押された時の処理を HelloActivity.java に以下のように追加します。

package com.example;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.content.Intent;

public class HelloActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button button = (Button)findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener() {
        	public void onClick(View v) {
        		startActivity(new Intent(HelloActivity.this, SubActivity.class));
        	}
        });
    }
}

ID でボタンウィジェットを探してきてイベントハンドラをセットしています。

ハンドラでは、クリックされた時に startActivity() で SubActivity を開始するようになっています。

マニフェストへの追加

SubActivity をマニフェストに追加します。

追加しないと、SubActivity を呼び出した時に実行時エラーになります。

  1. AndroidManifest.xml を「Android Manifest Editor」で開きます。
  2. 「Application」タブの下の方の Application Nodes にある「Add」ボタンを押します。
  3. 追加する種類を問うダイアログがでるので「Activity」を選択します。
  4. 属性の Name に「.SubActivity」を入力します
  5. 属性の Label に「@string/app_name」を入力します。(他は空欄でいいです)
  6. 変更を保存(Ctrl-S)します

20120407212819

実行

では、実行します。

20120407214113

「それでは」ボタンが表示されてます。クリックします。

20120407214114

切り替わりました。

----

やったことをまとめます。

Hello
  |-- src
  |     |-- com.example
  |           |-- HelloActivity.java : onCreate() にボタンにリスナを設定する処理を追加
  |           |-- SubActivity.java   : (新規作成)
  |
  |-- res
  |     |-- layout
  |     |     |-- main.xml : ボタンを追加
  |     |     |-- sub.xml  : (新規作成)
  |     |
  |     |-- values
  |           |-- strings.xml : goodbye、button1_label を追加
  |
  |-- AndroidManifest.xml : SubActivity を登録

----

ビューが隠れるとアクティビティの状態は「Running」から「Paused」に遷移するはずです。その時 onPause() が呼ばれるはずです。

以下のメソッドを HelloActivity クラスに追加して、ブレークポイントを貼って、Debug Run すると確かに、ボタンを押してビューが切り替わるタイミングでブレークされました。

    @Override
    public void onPause() {
    	super.onPause();  // ブレークポイント
    }