私の理解では、クリックをリッスンするボタンオブジェクトを作成する場合、次のことを行う必要があります。
OnClickListner
を使用して、ユーザーのクリックをリッスンさせますonClick
を使用して、ユーザーがボタンをクリックした後にアクションを実行しますさて、
setOnClickListener
は上記のロジックのどこに収まりますか?setOnClickListener
?OnClickListener
?View.OnClickListener
?Android Devで見つけたものは次のとおりです。
//The example below shows how to register an on-click listener for a Button.
// Create an anonymous implementation of OnClickListener
private OnClickListener mCorkyListener = new OnClickListener() {
public void onClick(View v) {
// do something when the button is clicked
}
};
protected void onCreate(Bundle savedValues) {
...
// Capture our button from layout
Button button = (Button)findViewById(R.id.corky);
// Register the onClick listener with the implementation above
button.setOnClickListener(mCorkyListener);
...
}
OnClickListener
をActivity
の一部として実装する方が便利な場合もあります。これにより、余分なクラスのロードとオブジェクトの割り当てが回避されます。例えば:
public class ExampleActivity extends Activity implements OnClickListener {
protected void onCreate(Bundle savedValues) {
...
Button button = (Button)findViewById(R.id.corky);
button.setOnClickListener(this);
}
// Implement the OnClickListener callback
public void onClick(View v) {
// do something when the button is clicked
}
}
ロジックは単純です。 setOnClickListener
はステップ2に属します。
OnClickListener
*のインスタンスを作成し、onClick
- methodをオーバーライドします。OnClickListener
- methodのbtn.setOnClickListener(myOnClickListener);
を使用して、そのボタンにonCreate
を割り当てます。onClick
のOnClickListener
関数が呼び出されます。* import Android.view.View;
を使用する場合は、View.OnClickListener
を使用します。 import Android.view.View.*;
またはimport Android.view.View.OnClickListener;
を使用する場合、OnClickListener
を使用します。
別の方法は、アクティビティ/フラグメントをOnClickListener
から継承させることです。このようにして、フラグメント/アクティビティをボタンのリスナーとして割り当て、onClick
をメンバー関数として実装します。
たとえば3つのボタンがあるとします
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Capture our button from layout
Button button = (Button)findViewById(R.id.corky);
Button button2 = (Button)findViewById(R.id.corky2);
Button button3 = (Button)findViewById(R.id.corky3);
// Register the onClick listener with the implementation above
button.setOnClickListener(mCorkyListener);
button2.setOnClickListener(mCorkyListener);
button3.setOnClickListener(mCorkyListener);
}
// Create an anonymous implementation of OnClickListener
private View.OnClickListener mCorkyListener = new View.OnClickListener() {
public void onClick(View v) {
// do something when the button is clicked
// Yes we will handle click here but which button clicked??? We don't know
}
};
}
それでは、私たちは何をしますか?
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Capture our button from layout
Button button = (Button)findViewById(R.id.corky);
Button button2 = (Button)findViewById(R.id.corky2);
Button button3 = (Button)findViewById(R.id.corky3);
// Register the onClick listener with the implementation above
button.setOnClickListener(mCorkyListener);
button2.setOnClickListener(mCorkyListener);
button3.setOnClickListener(mCorkyListener);
}
// Create an anonymous implementation of OnClickListener
private View.OnClickListener mCorkyListener = new View.OnClickListener() {
public void onClick(View v) {
// do something when the button is clicked
// Yes we will handle click here but which button clicked??? We don't know
// So we will make
switch (v.getId() /*to get clicked view id**/) {
case R.id.corky:
// do something when the corky is clicked
break;
case R.id.corky2:
// do something when the corky2 is clicked
break;
case R.id.corky3:
// do something when the corky3 is clicked
break;
default:
break;
}
}
};
}
または、これを行うことができます。
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Capture our button from layout
Button button = (Button)findViewById(R.id.corky);
Button button2 = (Button)findViewById(R.id.corky2);
Button button3 = (Button)findViewById(R.id.corky3);
// Register the onClick listener with the implementation above
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do something when the corky is clicked
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do something when the corky2 is clicked
}
});
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do something when the corky3 is clicked
}
});
}
}
または、View.OnClickListenerを実装できます。これが最良の方法だと思います。
public class MainActivity extends ActionBarActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Capture our button from layout
Button button = (Button)findViewById(R.id.corky);
Button button2 = (Button)findViewById(R.id.corky2);
Button button3 = (Button)findViewById(R.id.corky3);
// Register the onClick listener with the implementation above
button.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// do something when the button is clicked
// Yes we will handle click here but which button clicked??? We don't know
// So we will make
switch (v.getId() /*to get clicked view id**/) {
case R.id.corky:
// do something when the corky is clicked
break;
case R.id.corky2:
// do something when the corky2 is clicked
break;
case R.id.corky3:
// do something when the corky3 is clicked
break;
default:
break;
}
}
}
最後に、実際の違いはありませんJust "Way better than the other"
簡単にするために、最初のコードスニペットのみを参照していることに注意してください。
// Create an anonymous implementation of OnClickListener
private OnClickListener mCorkyListener = new OnClickListener() {
public void onClick(View v) {
// do something when the button is clicked
}
};
protected void onCreate(Bundle savedValues) {
...
// Capture our button from layout
Button button = (Button)findViewById(R.id.corky);
// Register the onClick listener with the implementation above
button.setOnClickListener(mCorkyListener);
...
}
setOnClickListener(View.OnClickListener l)
は、Viewクラスのパブリックメソッドです。 ButtonクラスはViewクラスを拡張するため、setOnClickListener(View.OnClickListener l)
メソッドを呼び出すことができます。
setOnClickListenerは、ビュー(この場合はボタン)がクリックされたときに呼び出されるコールバックを登録します。この回答は、最初の2つの質問に答えるはずです。
1。setOnClickListener
は上記の論理にどこに収まりますか?
ボタンがクリックされたときにコールバックを登録します。 (次の段落で詳細に説明します)。
2。ボタンのクリックを実際に聞いているのはどれですか?
setOnClickListener
メソッドは、ボタンのクリックを実際にリッスンするメソッドです。
呼び出されるコールバックを登録すると言うと、メソッドの入力パラメーターであるView.OnClickListener l
を実行します。あなたの場合、それはbutton.setOnClickListener(mCorkyListener);
で言及されたmCorkyListener
になり、次にonClick(View v)
で言及されたメソッドを実行します
// Create an anonymous implementation of OnClickListener
private OnClickListener mCorkyListener = new OnClickListener() {
public void onClick(View v) {
// do something when the button is clicked
}
};
さらに進んで、OnClickListener
は、ビュー(この場合はボタン)がクリックされたときに呼び出されるコールバックのインターフェイス定義です。簡単に言うと、そのボタンをクリックすると、mCorkyListener
内のメソッド(OnClickListener
の実装であるため)が実行されます。ただし、OnClickListener
にはOnClick(View v)
という1つのメソッドしかありません。したがって、ボタンをクリックしたときに実行する必要のあるアクションはすべて、このメソッド内でコーディングする必要があります。
setOnClickListener
とOnClickListener
の意味がわかったので、2つを自分で区別できると確信しています。 3番目の用語View.OnClickListener
は、実際にはOnClickListener
そのものです。 View.
の前にある唯一の理由は、プログラムの最初のimport
ステートメントの違いによるものです。 importステートメントとしてimport Android.view.View;
のみを使用する場合は、View.OnClickListener
を使用する必要があります。これらのインポートステートメントのいずれかを言及する場合:import Android.view.View.*;
またはimport Android.view.View.OnClickListener;
View.
をスキップして、単純にOnClickListener
を使用できます。
Viewはすべてのウィジェットのスーパークラスであり、OnClickListenerインターフェイスはこのクラスに属します。すべてのウィジェットはこれを継承します。 View.OnClickListenerはOnClickListenerと同じです。ボタンに必要なアクションを実現するには、このリスナーからonClick(View view)メソッドをオーバーライドする必要があります。
ウィジェットのクリックイベントをリッスンするようAndroidに指示するには、以下を行う必要があります。
widget.setOnClickListener(this); // If the containing class implements the interface
// Or you can do the following to set it for each widget individually
widget.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Do something here
}
});
OnClick()メソッドに渡された「View」パラメーターは、ビューがクリックされたことをAndroidに通知するだけです。 Button、TextView、またはその他のいずれかです。すべてのウィジェットにOnClickListenerを設定するか、これらすべてのウィジェットを含むクラスにインターフェースを実装させるだけです。この場合、すべてのウィジェットに共通のonClick()メソッドがあり、メソッドに渡されるビューのIDを確認し、必要な各要素のIDと照合するだけです。その要素に対してアクションを実行します。
まず、View.OnClickListener
とOnClickListener
の間に違いはありません。 View.OnClickListener
を直接使用する場合は、書く必要はありません。
インポートAndroid.view.View.OnClickListener
OnClickListenerインスタンス(例:myListener
名前付きオブジェクト)をsetOnclickListener()
経由でビューのリスナーとして設定します。 click
イベントが発生すると、そのmyListener
が通知され、onClick(View view)
メソッドが呼び出されます。それが私たち自身の仕事をする場所です。これがお役に立てば幸いです。