Android:使用setOnClickListener / onClick的SWITCH语句获取多个button?

假设我在LinearLayout中有几个button,其中2个是:

mycards_button = ((Button)this.findViewById(R.id.Button_MyCards)); exit_button = ((Button)this.findViewById(R.id.Button_Exit)); 

我在他们两个上注册setOnClickListener()

 mycards_button.setOnClickListener(this); exit_button.setOnClickListener(this); 

如何使开关区分Onclick中的两个button?

 public void onClick(View v) { switch(?????){ case ???: /** Start a new Activity MyCards.java */ Intent intent = new Intent(this, MyCards.class); this.startActivity(intent); break; case ???: /** AlerDialog when click on Exit */ MyAlertDialog(); break; } 

使用:

  public void onClick(View v) { switch(v.getId()){ case R.id.Button_MyCards: /** Start a new Activity MyCards.java */ Intent intent = new Intent(this, MyCards.class); this.startActivity(intent); break; case R.id.Button_Exit: /** AlerDialog when click on Exit */ MyAlertDialog(); break; } } 

请注意,这将不会在Android库项目(由于http://tools.android.com/tips/non-constant-fields ),您将需要使用类似于:

 int id = view.getId(); if (id == R.id.Button_MyCards) { action1(); } else if (id == R.id.Button_Exit) { action2(); } 

另一个select是在setOnClickListener()中添加一个新的OnClickListener作为参数,并覆盖onClick()方法:

 mycards_button = ((Button)this.findViewById(R.id.Button_MyCards)); exit_button = ((Button)this.findViewById(R.id.Button_Exit)); // Add onClickListener to mycards_button mycards_button.setOnClickListener(new OnClickListener() { public void onClick(View view) { // Start new activity Intent intent = new Intent(this, MyCards.class); this.startActivity(intent); } }); // Add onClickListener to exit_button exit_button.setOnClickListener(new OnClickListener() { public void onClick(View view) { // Display alertDialog MyAlertDialog(); } }); 
 public class MainActivity extends Activity implements View.OnClickListener { private Button btnForward, btnBackword, btnPause, btnPlay; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initControl(); } private void initControl() { btnForward = (Button) findViewById(R.id.btnForward); btnBackword = (Button) findViewById(R.id.btnBackword); btnPause = (Button) findViewById(R.id.btnPause); btnPlay = (Button) findViewById(R.id.btnPlay); btnForward.setOnClickListener(this); btnBackword.setOnClickListener(this); btnPause.setOnClickListener(this); btnPlay.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnForward: break; case R.id.btnBackword: break; case R.id.btnPause: break; case R.id.btnPlay: break; } } } 

在OnCreate方法中: –

 { Button b = (Button)findViewById(R.id.button1); b.setOnClickListener((View.OnClickListener)this); b = (Button)findViewById(R.id.button2); b.setOnClickListener((View.OnClickListener)this); } @Override public void OnClick(View v){ switch(v.getId()){ case R.id.button1: //whatever break; case R.id.button2: //whatever break; } 

还有第三种select。 在你的onCreate()方法中,find你所有的button视图,并将它们保存为类数据成员。 然后,您可以级联一组if-else语句来查找哪个是哪个。 这是一种混乱,但是如果你不知道button的ID(如果你在java代码中生成button可能会很复杂),这是必须的。

 @Override public void onClick(View v) { if (v == m_myCards) { Intent intent = new Intent(this, MyCards.class); this.startActivity(intent); } else if (v == m_exit) { MyAlertDialog(); } else if (v == m_back) { finish(); } 

这种技术的另一个好处是它灵活快速(不必parsingID)。 坏消息是你需要把这些小部件放在内存中。

不知道哪种方法更好。