Hello world!アプリの作成(3)

On 2010年6月6日, in Android開発, by cliph

前回までで、レイアウトXMLを作りました。

今回はいよいよ、javaファイルのコーディングに入ります。

HelloWorld.javaの編集

パッケージ・エクスプローラから「HelloWorld」→「src」→「com.hogehoge.android.helloworld」→「HelloWorld.java」と選択してHelloWorld.javaを開きます。

HelloWorldjava

デフォルトでは以下の様になっていると思います。

package com.hogehoge.android.helloworld;

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

public class HelloWorld extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
  }
}

まず、この内容を説明します。

package com.hogehoge.android.helloworld;
import android.app.Activity;
import android.os.Bundle;

冒頭のこの部分は、このクラスが所属するパッケージの定義と、このファイル内で利用するライブラリのインポート定義です。この辺の記述はjavaと何ら変わりません。また、殆どのjavaライブラリがAndroidでも利用できます。

次に、

public class HelloWorld extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
  }
}

この部分がアプリの本体となるクラスです。このクラスはActivityクラスを継承したHelloWorldと言う名前のクラスだと定義されています。また、アプリが起動された時に呼ばれるonCreate()メソッドをオーバーライドしたメソッドが追加されています。

デフォルトのonCreate()メソッドでは画面表示に使うレイアウトXMLを指定する処理のみを行います。

setContentView(R.layout.main);

の部分がそれです。
引数に渡しているR.layout.mainと言うのは「res」フォルダの中の「layout」フォルダにある「main」と言うレイアウトXMLを表すIDです。ちなみに、layoutを始め、IDを振ったview、画像ファイル等へアクセスする場合は必ず、このR.××.△△を使います。

さて、今回はこれを以下の様に編集して、ボタンをクリックしたらEditTextビューにHelloWorld!!と表示されるようにします。

package com.hogehoge.android.helloworld;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class HelloWorld extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);

   Button btn = (Button)findViewById(R.id.Button01);

   btn.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
       // TODO 自動生成されたメソッド・スタブ
       EditText text = (EditText)findViewById(R.id.EditText01);
       text.setText(“Hello World!!”);
       }
   });
  }
}

追加したのはこの部分です。

Button btn = (Button)findViewById(R.id.Button01);

btn.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
  // TODO 自動生成されたメソッド・スタブ
  EditText text = (EditText)findViewById(R.id.EditText01);
  text.setText(“Hello World!!”);
 }
});

まず、

Button btn = (Button)findViewById(R.id.Button01);

ここに出てくるfindViewById(int)と言うメソッドは、IDを指定して該当viewの参照を取得すると言うものです。上記の例ではR.id.Button01と言うIDを指定してviewを取得。取得出来るのは親ClassであるViewなので、ボタンとして扱えるよう、(Button)でボタンとしてキャストした上でButton型変数btnに格納しています。
※お気づきだと思いますが、このButton01と言うIDはレイアウトXML作成の際にボタンに設定したandroid:idの値です。

で、このbtn変数を使って何をやるかと言うと、クリックされた時のイベント処理を定義しています。

btn.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
  // TODO 自動生成されたメソッド・スタブ
  EditText text = (EditText)findViewById(R.id.EditText01);
  text.setText(“Hello World!!”);
 }
});

この部分です。
Androidではボタン等のViewへのアクションや、ハードキーの押下等各種イベントをそれぞれに対応したListenerを用意して捕捉します。ここでは、btnが参照を保有しているボタンに対して、新しく作ったOnClickLister()をセットしています。
そして、その新しいOnClickLister()のonClick()メソッドをオーバーライドして独自の処理を記述しています。

独自処理の部分がこれです。

  EditText text = (EditText)findViewById(R.id.EditText01);
  text.setText(“Hello World!!”);

ボタンと同じように、IDでEditTextの参照を取得し、それに対してsetText()メソッドで「Hello World!!」と言うテキスト設定しています。

このメソッドが実行されると画面のEditTextビューにHelloWorld!!が表示されるわけです。

そうそう。忘れる所でした。

import android.view.View;
import android.widget.Button;
import android.widget.EditText;

実は上記のインポート定義も追加されています。これは今回処理中で使ったViewやボタン、EditTextのクラスをインポートしたからです。
でもこれは、Eclipseがほとんど助けてくれるのであまり意識する必要はありません。
インポートされていないクラスを使おうとすると、該当部分に赤下線がでて警告されます。
その部分にマウスオーバーすると、改善策が列挙されるので、この中から○○をインポートと言うのを選べば良いんです。

quickhint

これで処理の記述は終了です。
機能がとてもシンプルなので大分コードも短いですが、意外と色んな要素が入っているので長文になってしまいました。

次はandroidマニフェストの記述と、デバッグについて説明します。

 

One Response to Hello world!アプリの作成(3)

  1. Mattie より:

    The forum is a bregthir place thanks to your posts. Thanks!

コメントを残す

メールアドレスが公開されることはありません。