私が読んだところによると、onClick
ボタンにハンドラーを割り当てる方法は 2 つあります。
android:onClick
シグネチャ付きのパブリック メソッドの名前を使用する XML 属性を使用するか、インターフェイスを実装するオブジェクトを渡す メソッドvoid name(View v)
を使用します。後者では、匿名クラスが必要になることがよくありますが、これは個人的には好きではありません (個人的な好みです)。または、を実装する内部クラスを定義する必要があります。setOnClickListener
OnClickListener
OnClickListener
XML 属性を使用すると、クラスではなくメソッドを定義するだけで済むので、XML レイアウトではなくコードで同じことを実行できるかどうか疑問に思っていました。
ベストアンサー1
いいえ、コード経由では不可能です。Android は、属性OnClickListener
を定義すると自動的に実装しますandroid:onClick="someMethod"
。
これら 2 つのコード スニペットは同じですが、実装方法が異なります。
コードの実装
Button btn = (Button) findViewById(R.id.mybutton);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myFancyMethod(v);
}
});
// some more code
public void myFancyMethod(View v) {
// does something very interesting
}
上記は のコード実装ですOnClickListener
。これは XML 実装です。
XML実装
<?xml version="1.0" encoding="utf-8"?>
<!-- layout elements -->
<Button android:id="@+id/mybutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click me!"
android:onClick="myFancyMethod" />
<!-- even more layout elements -->
バックグラウンドでは、Android はクリック イベントでメソッドを呼び出す Java コード以外の何も実行しません。
上記の XML では、Android は現在のアクティビティ内でのみonClick
メソッドを検索することに注意してくださいmyFancyMethod()
。フラグメントを使用している場合は、この点を覚えておくことが重要です。フラグメントを使用して上記の XML を追加しても、Android はXML の追加に使用されたフラグメントのファイルonClick
内でメソッドを検索しない.java
ためです。
もう一つ気づいた重要なことがあります。あなたは匿名メソッドを好まないとおっしゃいました。匿名クラスが好きではないと言いたかったのです。