在 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) {
                
            }
        });