在 onClick() 的 switch 语句中使用 ID 的意义
Significance of using ID in switch statements in onClick()
我想问一下在实现多个按钮的onClickListener接口时创建switch语句的意义何在?比如,我们已经通过 button_name.setOnClickListener()
为那个特定的按钮调用了 setOnClickListener
那么在 switch 语句中再次指定 id 有什么意义呢?为什么有必要这样做?做 button_name.setOnClickListener() 的意思不是-“为这个按钮做这里的事情”吗?
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;
}
}
}
我想问的是,执行 button2.setOnCLickListener() 的意思是 - “执行此函数为 button2 设置的内容”,对吗?如果不是,那么 setOnClickListener() 执行的实际 purpose/function 是什么?
由于您已将 clickListeners 设置为 3 个不同的按钮,方法
.....onClick(View v){
.....
将在您单击这 3 个按钮中的任何一个时被调用。如果单击按钮 1,则您不想执行实际分配给按钮 3 的任务。因此,要检查并找出按下了哪个按钮,switch 语句是必要的。
或者您可以这样做:
corkyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
// do something when the corky is clicked
}
});
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
// do something when the play is clicked
}
});
等等……
这样你就不需要 switch 语句,因为在这种情况下你知道哪个按钮被点击了,因为你设置了 clickListener 并且还指定了你想在那里做什么。
它更像是一个干净的外观,一个更具可读性的代码风格结构。如果您有多个需要点击监听器的小部件,通过实现 View.OnClickListener 接口
并且覆盖 onClick 使外观更清晰。
and inside onClick(View view){
- you can also use if statement but when the number of widgets is more
then it becomes messy, that's why we use switch statement to look cleaner.
}
和
btn.setOnClickListener(this)
// 告诉按钮通过接口
这样重写的 onClick 就可以听这个了。
但是如果您不想要那个或者您只有一个小部件可以点击
然后就用这个,不需要实现和覆盖。
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
我想问一下在实现多个按钮的onClickListener接口时创建switch语句的意义何在?比如,我们已经通过 button_name.setOnClickListener()
为那个特定的按钮调用了 setOnClickListener那么在 switch 语句中再次指定 id 有什么意义呢?为什么有必要这样做?做 button_name.setOnClickListener() 的意思不是-“为这个按钮做这里的事情”吗?
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;
}
}
}
我想问的是,执行 button2.setOnCLickListener() 的意思是 - “执行此函数为 button2 设置的内容”,对吗?如果不是,那么 setOnClickListener() 执行的实际 purpose/function 是什么?
由于您已将 clickListeners 设置为 3 个不同的按钮,方法
.....onClick(View v){
.....
将在您单击这 3 个按钮中的任何一个时被调用。如果单击按钮 1,则您不想执行实际分配给按钮 3 的任务。因此,要检查并找出按下了哪个按钮,switch 语句是必要的。
或者您可以这样做:
corkyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
// do something when the corky is clicked
}
});
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
// do something when the play is clicked
}
});
等等……
这样你就不需要 switch 语句,因为在这种情况下你知道哪个按钮被点击了,因为你设置了 clickListener 并且还指定了你想在那里做什么。
它更像是一个干净的外观,一个更具可读性的代码风格结构。如果您有多个需要点击监听器的小部件,通过实现 View.OnClickListener 接口 并且覆盖 onClick 使外观更清晰。
and inside onClick(View view){
- you can also use if statement but when the number of widgets is more
then it becomes messy, that's why we use switch statement to look cleaner.
}
和
btn.setOnClickListener(this)
// 告诉按钮通过接口 这样重写的 onClick 就可以听这个了。
但是如果您不想要那个或者您只有一个小部件可以点击 然后就用这个,不需要实现和覆盖。
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});