2011-08-16 17 views
6

Androidでは、ボタンのクリックを処理する3つの一般的な方法があるようですが、メソッド間にはどの程度の違いがありますか?そして、何らかの形で彼らの「より良い」ものがありますか?私が見ておくAndroidでクリックされたボタンを処理する方法は?

の3つの方法がある:

匿名クラス

は、例えば、その後、setOnClickListenerに新しい匿名クラスを渡し、それのIDでボタンを探しますonCreate

findViewById(R.id.myButton).setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     // .. Whatever 
    } 
}); 

に、例えば、OnClickListenerを実装し、setOnClickListenerthisを渡し、その後、ボタンIDに基づいて、switch文を使用

をOnClickListener実装onCreate

findViewById(R.id.myButton).setOnClickListener(this); 

と、このようonClickを使用し、代わりにあなたのボタンIDを与えるあなたの活動のためのXMLレイアウトで

、atribute onClick

public void onClick(View v) { switch(v.getId()) { case R.id.myButton: // ... whatever ... break; } } 

のような使用のonClick XMLを実装中:

<Button 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:onClick="buttonClicked" 
    android:text="Button" /> 

は、このようなあなたのAcitiviyでbuttonClicked方法があります。現時点で

public void buttonClicked(View v) { 
    // ... whatever ... 
} 

私は、XML属性を使用する傾向があるが、それは、コードの最低額を含むので、それはただのです。他の方法はいつ使うべきですか?

+0

+1第3の方法を説明するため。私はAndroidを学んでいるだけで、 'onClick'属性を認識していませんでした。 – Mike

答えて

4

最初の2つは古典的なアプローチです。あなたが好むのは、Androidの質問よりも一般的なJavaの質問のほうが好きです。 3つ目は後で追加して作業を簡単にしました。

ボタンにクリックリスナーを設定することは非常に一般的な作業ですが、 にはかなりの定型コードが必要です。ボトムプレートの量を減らす1つの方法は、複数のボタンの間で1つのクリックリスナを共有することです。このテクニックはクラスの数を減らしますが、それでもまだ にはかなりの量のコードが必要ですが、XMLレイアウトファイルの各 ボタンにはまだIDが必要です。 Android 1.6の場合は、 のどれも必要ありません。あなたがしなければならないのは、私は本当にいつもの好みとしてそれを見てきました

Source

1

(メソッドが1つのビューの引数を持っている必要があります)クリックを処理するために、あなたの 活動にパブリックメソッドを宣言しています。最後の2つのメソッドが実行時にオブジェクトを作成していないため、少し速いかもしれないこと以外は、パフォーマンス上の利点があります。

最初のオプションはコードを単一のボタンに分離するので、ボタンをクリックしたときにコードが実行されることがわかっているので、デバッグは非常に簡単です。しかし、多くのボタンは、初期化メソッドを大きなサイズに拡張させる可能性があります。

最後の2つの方法は、都合の良いときに便利で清潔な1つの場所にすべてのボタン操作を入れましたが、v.getId()メソッドでどのボタンがユーザーによってタップされたか解読する必要があります。

最後のオプションを使用すると、特定のボタンの特定のメソッドを簡単に指定できるようになります。そのようなボタンを個別に選択することができますが、単一の目的で多くのメソッドを使用できます。

アクティビティやクラスではなくダイアログの残りの部分でコードを保持するため、ボタンを含むカスタムダイアログウィンドウには常にインラインメソッド(匿名クラス)が使用されています。 onCreateDialogを上書きすると、カスタムダイアログのボタンが初期化されます。

ボタンがメインウィンドウにある場合は、アクティビティにOnClickListenerを実装します。

関連する問題