2012-01-14 7 views
1

OnClickメソッドを使用するためにOnClickListenerを実装する必要がある理由がわかりません。このコードを仮定:アクティビティでOnClickListenerを実装すると、どのような影響がありますか?

public class KlickitestActivity extends Activity implements OnClickListener { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 

@Override 
public void onClick(View v) { 
    // code what happens when a click is made 
} 

クラスから、私は唯一の方法のonClick(ビューV)を使用OnClickListener - そしてこの1つは上書きされます。 OnClickListenerを実装せずにonClickメソッドを定義するだけの理由はありますか?

答えて

5

できます。

Button1.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      //Do stuff 
     }}); 
Button2.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      //Do stuff 
     }}); 

ただし、OnClickListenerを実装すると、イベントの処理が簡単になり、コードの可読性が向上します。つまり、あなたは1つのリスナーメソッドを使用して、switch文で複数のボタン/リスナーを処理するためにViewを渡す、と似たようなことができます:ちょうど暴徒の答えともスコットのコメントやリンクを拡大する

public void onClick(View view){ 
    switch(view.getId()){ 

    case R.id.Button1: 
     //Stuff for button 1 
     break; 

    case R.id.Button2: 
     //Stuff for button 2 
     break; 
     break; 

    case R.id.Button3: 
     //Stuff for button 3 
     break; 
    } 
+0

ありがとう、モブ、それは私にとって非常に理解できる答えです!しかし、私はまだOnClickListenerを実装するときに何が起こるのか理解していません。つまり、実装されるだけで、OnClickListenerの新しいオブジェクトをインスタンス化しないということですか? (私の言葉が分かりやすいように:-) – BNetz

+1

OnCLickListenerを実装すると、ActivityクラスがActivityとOnCLickListenerの両方に効果的になります。つまり、OnClickListenerをパラメータとして取るオブジェクトにアクティビティのインスタンスを渡すことができます。 http://docs.oracle.com/javase/tutorial/java/concepts/interface.html –

+0

ありがとう、スコット、説明のために! – BNetz

1

...

Activityは、主にUIのフレームワークであり、ユーザーとのやりとりを行うための事前定義された方法はありません。デザイナー/開発者は、Activityの目的に基づいて、どのUIコンポーネントを含めるかを選択します。

ようにUIのようにButtonsCheckBoxesListViewsなどのコンポーネントと、非常に異なる目的を果たすと、それはそれでActivityの場所ではありませんが、これらのUI要素が(クリック、長いクリックに反応する何のイベントを知るための基本的な形ですスワイプなど)は、Activityが常にホストする事前定義されたUI要素のセットがないためです。そのため、私たちがUIの設計方法に基づいて使用する必要があるイベントハンドラ(リスナ)を実装するのは私どもの責任です。

関連する問題