2

違いは何ですか:

public class MainActivity extends Activity {

    public void onCreate (Bundle savedInstanceState) {
        button1 = (Button) findViewById(R.id.btn1);
        button1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // Click code
            }
        )};
    }
}

と:

public class MainActivity extends Activity implements OnClickListener {

    public void onCreate (Bundle savedInstanceState) {
        button1 = (Button) findViewById(R.id.btn1);
        button1.setOnClickListener(this);
    }

    public void onClick(View arg0) {
        switch(arg0.getId()) {
        case R.id.button1:
            // Click code
            break;
        }
    }
}

どちらもまったく同じ機能と結果を備えています。

4

1 に答える 1

3

最初のメソッドは、インターフェイス メソッドを実装する匿名内部クラスを使用します。このアプローチを使用すると、その特定のビューのイベントのみを受け取ります。

2 番目の方法では、Activity クラス全体でOnClickListenerインターフェイスを実装します。すべての View の OnClickListener を に設定し、thisすべてのクリック イベントを 1 つのメソッドで受け取ることができます。そこで、それらをフィルター処理して操作することができます。

最初の方法は次のように変換されます。

Button.OnClickListener anonymous_listener = new Button.OnClickListener() { ... };
button.setOnClickListener(anonymous_listener);

つまり、OnClickListener使用時に新しいインスタンスを動的に作成して保存します。

2 番目の方法では、クラス全体で の 1 つのインスタンスを使用しますOnClickListener。これは、クリックをリッスンするすべてのビューに渡されます。

于 2013-02-11T12:26:04.447 に答える