2016-09-18 22 views
1

私はアンドロイドの開発に慣れていて、実世界の例ですべてのインターフェイスを使用するのは、インターフェイスの使い方を示すサンプルコードだけで使用するよりはるかに難しいことに気付きました。匿名クラスのsetOnClickListener?

私はこれで起動しますタイプごとに単一の行を理解したいと思いますので:最初の行は簡単ですが、私はXMLからそのIDに基づいて、ボタンオブジェクトにボタンを割り当てる

Button clearButton = (Button) findViewById(R.id.buttonClear); 

clearButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    } 
}); 

をが、リスナー私は理解していない、単純に私はclearButtonオブジェクトを取得し、そのメソッドの1つ、setOnClickListenerを使用して、引数で私はオーバーライドしたい動作を匿名クラスを渡しますが、View.OnClickListener()はオブジェクトではありません?関数の中にクラスを書くのですか?

new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    } 

これはインラインクラスを含むOnClickListenerのように見えますか?

+0

[匿名クラスのJavaチュートリアル](https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html)を参照してください。 – SOFe

+0

'View.OnClickListener()'はコンストラクタであり、匿名クラスを呼び出しています。 – 4castle

+0

と私はコンストラクタ内に新しいクラスを渡していますか? –

答えて

1

これはオブザーバーパターンと呼ばれています。リスナーをUIに登録し、何かが発生したときにコードを呼び出すように指示します。この場合、ユーザーがクリアボタンをクリックしていることがあります。 SO

:これは単純です

、あなたはボタンオブジェクトを作成し、それをあなたのレイアウトファイルを添付しています。

Button clearButton = (Button) findViewById(R.id.buttonClear); 

次へ:

私はこれを書き直してみましょう:これまで

clearButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     } 
    }); 

//First let's create an implementation of this interface. 
// These are also refereed to as callback interfaces as 
//the methods in their implementation are called as whenever 
//something happens on the UI. In this call onClick is the callback method. 


private class MyButtonClicklistener implements View.OnClickListener 
{ 
    @Override 
      public void onClick(View v) 
{ 
//Do something on the button click 
      } 

} 

リスナー

MyButtonClickListener mListener = new MyButtonClickListener(); 
のインスタンスを作成します。

最後にリスナーを登録してください。ここで、クリアボタンをクリックするたびにmListenerオブジェクトのonClickメソッドを呼び出すようにUIに指示します。

clearButton.setOnClickListener(mListener); 
+0

私はその名前にドットが含まれているインターフェイスを見たことがない、私はそのView.OnClickListenerを実装することを理解していないそのようなビューのインターフェイスからの例intのような正確な変数を実装していますか? –

+0

この回答を見てくださいhttp://stackoverflow.com/a/6947033/1099142と特にこの答えのコメント。 – nitinsh99