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

时间:2011-10-24 09:19:26

标签: java android button onclick

我在android中启动了一点程序, 我在一个活动中有3个按钮。

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

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

感谢。

6 个答案:

答案 0 :(得分:34)

使用这种方式:

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

   }
};

答案 1 :(得分:23)

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

<强>更新

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

示例:

<?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>

现在,您的活动工具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

答案 2 :(得分:6)

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

这是好方法。

答案 3 :(得分:2)

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

编辑:

找到相关主题:

  1. Best practice for defining button events in android
  2. best practices for handling UI events

答案 4 :(得分:0)

  

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

答案 5 :(得分:0)

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

如果您不想初始化按钮变量但希望跟踪按钮点击事件,这可能很有用。谢谢!