レイアウト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に代入する」というロジックをここに記述してしまうと、値を取得できません。
簡単な流れをイメージすると・・・
- アプリを起動する
- 初期化処理(18~21行目)が実行される
- EditTextに文字が入力される
- Buttonがクリックされたときに、24行目のコールバックメソッドが実行される。
- 25行目でEditTextに入力された内容をString型に変換する
- 27行目で、変換されている入力内容をToast内に表示させる
このような流れになります。
つまり24行目のコールバックメソッドであるonClick()の外は、onCreate()内であるため、ここに記述する内容は初期化処理ということになります。したがって、このような順番になります。いかがでしょうか?イメージができればそこまで難しい話ではありませんね。


[clearboth]