我是新的Android环境我只是想知道为什么OnClick(View v)
方法接受this
如果所需的参数是在类型View
和我的方法扩展Activity
?View
和Activity
之间有关系吗?请参考代码使问题更清楚。
...
public class MainActivity extends Activity implements OnClickListener {
private Button btn1;
private Button btn2;
@Override
protected void onCreate(Bundle savedInstanceState){
...
btn1 = (Button)findViewById(R.id.button1);
btn2 = (Button)findViewById(R.id.button2);
// Below are the methods calling which confuses me
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
...
}
public void onClick(View v) {
int id = v.get();
switch(id) {
case R.id.button1:
//statement for button1
case R.id.button2:
//statement for button2
...
}
}
}
EDIT:这个问题是误导性的,只是由于忽略了'setOnClickListener(…)'与'onClick(…)'相同。我只是不知道如何结束这个问题
看,
先理解这两行
View.OnClickListener - Interface definition for a callback to be invoked when a view is clicked.
onClick() - Called when a view has been clicked.
,
你的活动是实施OnClickListener
public class MainActivity extends Activity implements OnClickListener{}
所以当你实现那个。有一个自动实现到类的方法叫做onClick()
所以当你传递this
关键字给任意视图的onClickListener
。这意味着你实际上是在调用onClick()
方法。
btn1.setOnClickListener(this); //calling onClick() method for button1
btn2.setOnClickListener(this); //calling onClick() method for button2
在onClick()
方法中
你只需要找到你的ID并为你想对视图做的事情编写代码。
public void onClick(View v){
int id=v.get(); // getting ID of Clicked View
switch(id){
case R.id.button1:
//called when you press button 1
//write your code
break;
case R.id.button2:
//called when you press button 2
//write your code
break;
...
}
有关onClickListener()的详细信息,请访问此网站/博客https://stand2code.blogspot.in/2016/12/multiple-buttons-onclicklistener-android.html
您正在扩展Activity
,但您也在实现OnClickListener
,而onClick()
是OnClickListener
接口的方法。因此,您必须在class
中实现其onClick
方法,因此this
不会引发任何冲突。对于一个接口,除了拥有正确的方法之外,还有什么比
setOnClickListener
以OnClickListener
实例为参数,OnClickListener
是包含onClick()
方法的接口。
参数必须是实现OnClickListener接口的某个对象的实例当你在这里传递setOnClickListener(this);
当前上下文时。