Android的一个OnClick方法为多个button?

我在android中开始了一些程序,在一个activity中我有3个button

我看到了一些示例代码,它们将相同的OnClick事件分配给所有button(即使它们执行完全不同的操作)以及方法Switch(id) case case case …

什么是更好的方法? 一个onClick方法和切换或许多方法,每个button一个?

谢谢。

Solutions Collecting From Web of "Android的一个OnClick方法为多个button?"

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

更新:

如果你已经在你的Activity布局xml文件中声明了Button,那么你可以在所有的button上使用相同的方法名来写属性android:onClick=""并在你的activity中实现这个方法。 现在你有一个方法的所有button,并在该方法区分buttonID。

例:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:onClick="buttonOnClick" android:layout_height="wrap_content" android:text="Hello, I am a Button 1" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:onClick="buttonOnClick" android:layout_height="wrap_content" android:text="Hello, I am a Button 2" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:onClick="buttonOnClick" android:layout_height="wrap_content" android:text="Hello, I am a Button 3" /> </LinearLayout> 

现在在你的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; } } 

或者,您可以在您的活动中应用相同的切换案例来dynamic添加button,而不是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); } } }; 

这是好方法。

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

编辑:

find相关主题:

  1. 在android中定义button事件的最佳做法
  2. 处理UI事件的最佳实践

在XML布局中注册onClick事件,然后在代码中处理它。 这是我将如何做到这一点:

 <Button android:id="@+id/btplus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click me" android:onClick="onBtnClicked"> 

方法在.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的答案很less。

 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; } } }; 

如果你不想初始化buttonvariables,但想跟踪button点击事件,这可能是有用的。 谢谢!