Tips

Android ユーザーインターフェース応用 ウィジェット TextView,EditText 【Android Tips】

レイアウトxmlファイル

<EditText
  android:id="@+id/editText1"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" />

javaファイル

package com.example.edittext;

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

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		final EditText editText = (EditText) findViewById(R.id.editText1);

		Button button = (Button) findViewById(R.id.button1);
		button.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				String str = editText.getText().toString();

				Toast.makeText(MainActivity.this, str + "を選択しました。",
						Toast.LENGTH_SHORT).show();
			}

		});
	}
}

さて基本的にはTextViewと同じ流れですが、特筆すべきは18行目と25行目でしょう。
なぜ25行目の処理を19行目に記述していないのでしょうか?
これは処理の問題です。

実はonCreate()内には初期化処理等を記述します。(詳細は後述の「Activityのライフサイクル」を参照)
したがって、EditTextのインスタンス化は18行目で問題がないのですが、「入力された値をString型に変換して、変数strに代入する」というロジックをここに記述してしまうと、値を取得できません。

簡単な流れをイメージすると・・・

  1. アプリを起動する
  2. 初期化処理(18~21行目)が実行される
  3. EditTextに文字が入力される
  4. Buttonがクリックされたときに、24行目のコールバックメソッドが実行される。
  5. 25行目でEditTextに入力された内容をString型に変換する
  6. 27行目で、変換されている入力内容をToast内に表示させる

このような流れになります。
つまり24行目のコールバックメソッドであるonClick()の外は、onCreate()内であるため、ここに記述する内容は初期化処理ということになります。したがって、このような順番になります。いかがでしょうか?イメージができればそこまで難しい話ではありませんね。

[clearboth]

Androidアプリ開発の必須知識!JAVAプログラミングを学べる連載リンク

はじめてのJAVA 連載

Android ユーザーインターフェースの基礎 【Android TIPS】
Android ユーザーインターフェース応用 ウィジェット RadioButton,CheckBox 【Android Tips】
一覧へ戻る

Recent News

Recent Tips

Tag Search