如何判断onClick()中单击了哪个按钮

时间:2013-03-31 17:29:16

标签: android android-widget

我在Android应用中有多个按钮。我想知道,在Java代码中,单击了哪个按钮。据我所知,这可以通过以下单一方法完成:

public void onClick(View view) {
    // Do something
}

在该方法中,您必须确定单击了哪个按钮。这是对的吗?

如果是这样,我怎么知道点击了哪个?我确实有findViewById()返回的各种Button对象。我只是不知道如何使用它们来判断点击了哪个按钮。

6 个答案:

答案 0 :(得分:12)

在您的活动类中实现View的OnClickListner。覆盖点击方法。

 Button b1= (Button) findViewById(R.id.button1);
//find your button id defined in your xml. 


b1.setOnClickListener(this);
// You have button OnClickListener implemented in your activity class.
//this refers to your activity context.

我使用过祝酒消息。

http://developer.android.com/guide/topics/ui/notifiers/toasts.html

 Toast.makeText(MainActivity.this,"button1", 1000).show();
 //display a toast using activity context ,text and duration

使用开关盒可以检查单击了哪个按钮。

在你的onClick方法中。

switch(v.getId())  //get the id of the view clicked. (in this case button)
{
case R.id.button1 : // if its button1
    //do something
    break;
}

这是完整的代码。

public class MainActivity extends Activity implements OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button b1= (Button) findViewById(R.id.button1);
    Button b2= (Button) findViewById(R.id.button2);
    Button b3= (Button) findViewById(R.id.button3);
    b1.setOnClickListener(this);
    b2.setOnClickListener(this);
    b3.setOnClickListener(this);

}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch(v.getId())
    {
    case R.id.button1 :
        Toast.makeText(MainActivity.this,"button1", 1000).show();
        break;
    case R.id.button2 :
        Toast.makeText(MainActivity.this,"button2", 1000).show();
        break;
    case R.id.button3 :
        Toast.makeText(MainActivity.this,"button3", 1000).show();
        break;  


    }

}
 }

答案 1 :(得分:4)

  

如果是这样,我怎么知道哪个被点击了?

老朋友切换将帮助您实现目标:

public void onClick(View view) {
   switch (view.getId()) {
      case R.id.btn1:
         // do your stuff for btn1
      break;
      case R.id.btn2:
         // do your stuff for btn2
      break;
      ...
   }
}

说明:每个小部件都有ID,因此您只需通过上面写的开关中的ID处理单击哪个按钮。

view.getId()返回小部件的ID

答案 2 :(得分:4)

有不同的方法来处理这个问题。根据您目前的情况,您可以使用

    public void onClick(View view) {
    // Do something
    view.getId();
}

将返回android:idxml的值。您可以使用switch语句比较值以决定要执行的操作并启用id。您还可以在每个onClick()的{​​{1}}中为xml提供帮助。

button

然后在你的java代码中你可以拥有

<Button
    ...
    android:onClick="functionName"/>

此处点击的public void functionName(View view) { // Do something } 将是您在view

中为此button分配的onClick

答案 3 :(得分:3)

您还可以为每个按钮使用匿名内部类:

Button b1= (Button) findViewById(R.id.button1);
Button b2= (Button) findViewById(R.id.button2);

b1.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // button 1 was clicked!
    }
});
b2.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // button 2 was clicked!
    }
});

答案 4 :(得分:1)

您可以使用ButterKnife库(http://jakewharton.github.io/butterknife/):

//Fragment
@InjectView(R.id.dialog_userinput)
public EditText userinput;

@InjectView(R.id.dialog_passinput)
public EditText passinput;

@OnClick(R.id.dialog_login)
public void login(View view) {
    //do stuff
    this.dismiss();
}

@OnClick(R.id.dialog_cancel)
public void cancel(View view) {
    //do stuff
    this.dismiss();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.dialog_layout, container);
    ButterKnife.inject(this, view);
    return view;
}

答案 5 :(得分:1)

implements 

    public class ProgramsFiles extends AppCompatActivity implements View.OnClickListener {

       public void onClick(View view) {
            switch (view.getId()) {
               case R.id.btnA:
                 //ExampleA
                   break;
               case R.id.btnB:
                //ExampleB
               break;      
    }
}
}