1. ホーム
  2. android

[解決済み] Android onClick in XML vs. OnClickListener

2023-02-27 21:34:06

質問

以前にも同じような質問があったようですが、今回は別件です。私はアンドロイドアプリの開発でかなり新しいです。 android:onclick="" XML属性と setOnClickListener メソッドを使用します。

  1. この2つの違いは何ですか?2つの実装の違いは、コンパイル時、実行時、あるいはその両方で見つかるのでしょうか?

  2. どのようなユースケースがどちらの実装に有利なのでしょうか?

  3. Androidでフラグメントを使用することで、実装の選択にどのような違いがあるのでしょうか?

どのように解決するのですか?

OnClickListenerとOnClickの違い。

  • OnClickListenerは実装が必要なインターフェースで、Javaのコードでビューに設定することができます。 をJavaコードで設定することができます。
  • OnClickListenerは、誰かが実際にクリックするのを待つものです。 クリックされたときに何が起こるかを決定します。 クリックされたときに何が起こるかを決定します。
  • 最近、androidはandroid:onclickと呼ばれるxml属性をビューに追加しました。 これは、ビューのアクティビティで直接クリックを処理するために使用することができます。 インターフェイスを実装することなく、ビューのアクティビティで直接クリックを処理するために使用することができます。
  • 必要であれば、リスナーの実装を別のものと簡単に交換することができます。
  • OnClickListener は、クリックイベントのアクション/ビヘイビアを、イベントをトリガーするビューから分離することを可能にします。単純なケースでは、これはそれほど大きな問題ではありませんが、複雑なイベント処理のために、これはコードのより良い読みやすさと保守性を意味するかもしれません。
  • OnClickListener はインターフェースなので、これを実装するクラスは、イベントを処理するために必要なインスタンス変数とメソッドを決定する際に柔軟性を持ちます。繰り返しになりますが、これは単純なケースでは大きな問題ではありませんが、複雑なケースでは、イベント処理に関連する変数/メソッドをイベントをトリガーするViewのコードと必要以上に混在させたくはないのです。
  • XMLレイアウトの関数バインディングを持つonClickは、onClickとそれが呼び出される関数の間のバインディングです。関数は、onClick が機能するために、1 つの引数 (View)を持つ必要があります。

どちらも同じように機能しますが、一方はJavaコードで設定され、もう一方はXMLコードで設定されます。

setOnClickListenerのコード実装です。

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
}

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 -->

性能です。

性能はどちらも同じです。Xmlはコンパイル時にバイナリコードに事前パースされるので、Xmlにはオーバーヘッドがありません。

制限事項。

android:onClickはAPIレベル4以降用なので、< 1.6を対象にしている場合は使えません。