android:onClick XML 属性は setOnClickListener とどう違うのでしょうか? 質問する

android:onClick XML 属性は setOnClickListener とどう違うのでしょうか? 質問する

私が読んだところによると、onClickボタンにハンドラーを割り当てる方法は 2 つあります。

android:onClickシグネチャ付きのパブリック メソッドの名前を使用する XML 属性を使用するか、インターフェイスを実装するオブジェクトを渡す メソッドvoid name(View v)を使用します。後者では、匿名クラスが必要になることがよくありますが、これは個人的には好きではありません (個人的な好みです)。または、を実装する内部クラスを定義する必要があります。setOnClickListenerOnClickListenerOnClickListener

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ためです。

もう一つ気づいた重要なことがあります。あなたは匿名メソッドを好まないとおっしゃいました。匿名クラスが好きではないと言いたかったのです。

おすすめ記事