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

Ron*_*oss 24 java android onclick button

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

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

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

谢谢.

Ngu*_*inh 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;
         }

   }
};
Run Code Online (Sandbox Code Playgroud)


use*_*305 24

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

更新:

如果已在Activity布局xml文件中声明了Buttons,android:onClick=""则为所有按钮的write属性设置相同的方法名称,并在活动中实现该方法.现在,您有一个所有按钮的方法,并在该方法中区分具有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>
Run Code Online (Sandbox Code Playgroud)

现在在你的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;
 }
}
Run Code Online (Sandbox Code Playgroud)

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


Nik*_*k88 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);
    }
}
};
Run Code Online (Sandbox Code Playgroud)

这是好方法.