Android一个用于多个按钮的OnClick方法?

我开始在android中编程一点,我在一个活动中有3个按钮

我看到一些示例代码将相同的OnClick事件分配给所有按钮(即使它们执行完全不同的操作),并且在方法Switch(id)案例案例中…

什么是更好的方法? 一个onClick方法和切换或很多方法,每个按钮一个?

谢谢。

Solutions Collecting From Web of "Android一个用于多个按钮的OnClick方法?"

如果你想减少编码行,那么使用View's OnClick() with switch statement ,如果你想单独处理所有点击(为了便于理解和维护代码),那么使用单独的所有button's onClick().

更新:

如果您在Activity布局xml文件中声明了Buttons,则为所有按钮的write属性android:onClick=""使用相同的方法名称,并在您的活动中实现该方法。 现在你有一个方法用于所有按钮,并且在该方法中区分具有id的按钮。

例:

 < ?xml version="1.0" encoding="utf-8"?>      

现在在你的Activity实现buttonOnClick

 public void buttonOnClick(View view) { switch(view.getId()) { case R.id.button1: // Code for button 1 click break; case R.id.button2: // Code for button 2 click break; case R.id.button3: // Code for button 3 click break; } } 

或者,您可以为活动中的动态添加按钮应用相同的开关案例,而不是buttonOnClick您必须使用已实现的View的OnClickListerner的 onClick

使用这种方式:

 @Override public void onCreate(Bundle savedInstanceState) { button1.setOnClickListener(onClickListener); button2.setOnClickListener(onClickListener); button3.setOnClickListener(onClickListener); } private OnClickListener onClickListener = new OnClickListener() { @Override public void onClick(View v) { switch(v.getId()){ case R.id.button1: //DO something break; case R.id.button2: //DO something break; case R.id.button3: //DO something break; } } }; 
 this.btnAddFriedtoFacebook = (Button) this.findViewById(R.id.btnAddFriedtoFacebook); this.btnAddFriedtoFacebook.setOnClickListener(this.backButtonClickListener); public OnClickListener backButtonClickListener = new OnClickListener() { public void onClick(final View view) { if (view == MatchInfoActivity.this.btnBack) { MatchInfoActivity.this.finish(); } if( view == MatchInfoActivity.this.btnAddFried){ Intent i = new Intent(Intent.ACTION_VIEW); MatchInfoActivity.this.startActivity(i); } if( view == MatchInfoActivity.this.btnAddBuddy){ Intent i = new Intent(Intent.ACTION_VIEW); MatchInfoActivity.this.startActivity(i); } } }; 

这是好方法。

我认为在xml(布局)中注册onClick是更好的方法。

编辑:

find相关主题:

  1. 在android中定义按钮事件的最佳实践
  2. 处理UI事件的最佳实践

在XML布局中注册onClick事件,然后在代码中处理它。 我就是这样做的:

  

.class中的方法

 public void onBtnClicked(View v) { switch (v.getId()) { case R.id.btplus: Toast.makeText(getApplicationContext(), "Plus is clicked" + "+", Toast.LENGTH_SHORT).show(); break; case R.id.btminu: Toast.makeText(getApplicationContext(),"Minus is clicked" + "-", Toast.LENGTH_SHORT).show(); break; default: break; } } 

@Nguyen的回答很少。

 findViewById(R.id.buttonOne).setOnClickListener(buttonClickListener); .... .... .... .... findViewById(R.id.buttonN).setOnClickListener(buttonClickListener); private View.OnClickListener buttonClickListener = new View.OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.buttonOne: // do something break; .... .... .... .... case R.id.buttonN: // do something break; } } }; 

如果您不想初始化按钮variables但想要跟踪按钮单击事件,这可能很有用。 谢谢!