カテゴリー:
Eclipse 3.7
閲覧数:487 配信日:2012-05-17 00:00
クリックリスナー
・このサンプルって、前ページと連動してるんだね
・全然気が付かなかったよ
その過程で幾つもエラーに遭遇したんだけど、エラーメッセージ、分かりづらい。かなり。
読み解くには経験値が必要。
現在、レベル0.1ぐらいなので、エラー解消するのが、もの凄く大変だった。
■ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]
■id は解決できないか、フィールドではありません
■public 型 HelloAndroidActivity_2 はそれ独自のファイル内に定義されなければなりません
■XMLファイルが開けない
エラーが発生しました。詳細については、エラー・ログを参照してください。
com/android/ide/eclipse/adt/internal/editors/layout/LayoutEditor
↓
何回かリフレッシュしたら、イケた。どゆこと?
↓
リフレッシュというか、
開いているファイルを一旦全部閉じ、一番始めに「XMLファイル」を開くとイケる
5/18
<クリックリスナー>
「View.OnClickListenerインターフェイス」をimplementsする仕組が分からないので、メモ。
■大前提
・ボタンのクリックイベントを検知するためには、ボタンのオブジェクトへリスナーを登録する
■リスナーとは?
・イベントに応じて呼び出されるメソッドが定義されたオブジェクト
・onCreateメソッドなど、特定のイベントが発生したら呼ばれるメソッドが定義されている
■リスナー例
・Activityクラス … onCreateメソッドなど、特定のイベントが発生したら呼ばれるメソッドが予め定義されている
■イベントは2種類ある
A.必ず発生するイベント処理 … onCreateメソッド
B.アプリケーションにより必ずしも発生しない場合があるイベント処理 … ボタンのイベントなど
Bについては、必ず発生するものではないため、そのイベントに対応するメソッドをすべて定義しておくのは無駄
↓
イベントごとに、呼ばれるメソッドだけを定義したクラス(インターフェイス)を用意しておき、必要に応じてそれを実装する、という方法を採用
※実装 … インターフェイスの場合このように呼称するが、中身はクラス継承と(ほぼ)同じ
■リスナー例
・ボタンのクリックイベントに対応するリスナー … Viewクラスで定義されていてる「View.OnClickListenerインターフェイス」。中身は、onClickというメソッドのみ定義
■結論
「OnClickListenerインターフェイスを実装したクラス」を、クリックイベントのリスナー(オブジェクト)として登録すれば、ボタンがクリックされた際、onClickメソッドが呼び出される
■コード例
1.必要パッケージをインポート
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
2.「OnClickListenerインターフェイスを実装したクラス」を作成
public class HelloAndroid2Activity extends Activity implements OnClickListener {
・implementsしないと、クリックイベントがButttonに渡されない
・理由は、クリックリスナーへ登録する際(=setOnClickListenerメソッドを実行する際)、引数で渡せるのはView.OnClickListener「として扱えるインスタンス」のみだから
3.ボタンオブジェクトの取得
Button bt = (Button)findViewById(R.id.button1);
4.クリックリスナーの登録
ボタンオブジェクトへ対して、「OnClickListenerインターフェイスを実装したクラス(HelloAndroid2Activity)」を登録
bt.setOnClickListener(this);
・引数で、インターフェースを実装したクラスのオブジェクトを指定。「OnClickListener」インターフェースを実装している場合には「this」で指定
5.抽象メソッド実行
ボタンをクリックすると、まず最初に、「View.OnClickListenerインターフェイス」のonClick抽象メソッドが呼ばれる
6.実装メソッド実行
次いで、実装したメソッドが呼ばれる
public void onClick(View view) {
▽Android/OnClickListener - Java - 教えて!goo
▽View.OnClickListenerインターフェイス | クラス | AndroidStyle