单击侦听器上的按钮

Button on click listener

我来自 iOS 世界,刚从 Android 开始。我参加了 java 培训,所以我知道如何创建方法,但我没有得到操作方法。

我想做的是从一个按钮创建一个方法动作,但我在任何地方都找不到如何做到这一点(显然找错了地方)。当我点击按钮 1 时,我想创建一个内部只有 a=1 的方法,当我点击按钮 2 时,我想要 a=2(然后我可以决定当 a 为 1 或 2 时要做什么)。

我在 Acitivity_main.xml 中创建了我的按钮并在 OnClick 中给出了一个方法名称,但我仅此而已。

和iOS比起来好像太基础了,不明白为什么找不到方法。

好心人能为我指明创建动作的正确方向吗?

您有三个选择:

常见于 1,2) 您需要为布局中的每个按钮分配一个 ID XML 文件

<Button android:id="@+id/my_button1"
..........
/>
<Button android:id="@+id/my_button2"
..........
/>

1) 在 activity 的 onCreate() 方法中 setContentView() 你需要为 OnClickListener 设置一个新的 OnClickListener每个按钮。

 public class MyActivity extends Activity  {
    int a;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button myButton1 = (Button) findViewById(R.id.my_button1);
        Button myButton2 = (Button) findViewById(R.id.my_button2);

        myButton1.setOnClickListener( new OnClickListener() {
          @Override
            public void onClick(View v) {
                // Do what you want here
                a = 1;
            }
        });

        myButton2.setOnClickListener( new OnClickListener() {
           @Override
            public void onClick(View v) {
                // Do what you want here
                a = 2;
            }
        });
      }

2) 正如您在第一种方法中看到的,我们需要从 OnClickListener 为每个按钮创建一个新对象。出于 性能 可读性 的原因,我们可以将所有这些混合到一个 OnClickListener 中。

public class MyActivity extends Activity implements View.OnClickListener {
    int a;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button myButton1 = (Button) findViewById(R.id.my_button1);
        myButton1.setOnClickListener(this);
        Button myButton2 = (Button) findViewById(R.id.my_button2);
        myButton2.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.my_button_1:
                a = 1;
                break;
            case R.id.my_button_2:
                a = 2;
                break;
        }
    }
    ...
}

3) 你不需要为这个选项分配一个id你只需要在XML中分配方法名称然后实现相同的方法在 activity 中具有完全相同的名称,但它必须将 View 对象作为参数。

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

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

然后在您的 activity 中编写方法。

public class MyActivity extends Activity implements View.OnClickListener {
    int a;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void button1Click(View v) {
       a = 1;
    }


    public void button2Click(View v) {
       a = 2;
    }
}

这就是您的全部选择。我个人比较喜欢2号。

您有两个选项来处理按钮,来自 documentation:

a) 在 java 文件中声明和定义方法

    int a = 0;
    final Button button = (Button) findViewById(R.id.button_id);
             button.setOnClickListener(new View.OnClickListener() {
                 public void onClick(View v) {
                     a = 1;
                 }
             });

b) 或在 xml 布局中定义方法:

 <Button
     android:layout_height="wrap_content"
     android:layout_width="wrap_content"
     android:text="@string/self_destruct"
     android:onClick="selfDestruct" />

然后在你的 java 文件中:

 int a = 0;
 public void selfDestruct(View view) {
     a = 1;
 }

首先在您的 xml 文件中分配按钮,如下所示:-

<Button android:id="@+id/button1"
..........
/>

<Button android:id="@+id/button2"
..........
/>

从 xml 中找到 ID 后,像下面那样在其上设置 OnclickListener,并且不要忘记在您的 class 上实现 OnClickListener 侦听器,例如 public class CLASSNAME 扩展 Activity 实现 OnClickListener

 button1 .setOnClickListener(CLASSNAME.this);
 button2.setOnClickListener(CLASSNAME.this);

在实现 onclickListener 之后,它将为您提供一个重写的方法,如 onclick(View v)

@Override
public void onClick(View v) {

    switch (v.getId()) {
    case R.id.button1 : //Here i assumes that button1 is the name of button in yours xml which you declare button1
    //  do something on button1 click
    break;

    case R.id.button2 :////Here i assumes that button2 is the name of button in yours xml which you declare button2

    //  do something on button2 click
    break;
 }
}
  • 在您的 activity 布局中创建两个按钮并将一些 ID 分配给 他们喜欢这样

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button2"
        android:layout_gravity="center_horizontal|top" />
    

    然后,在您的 activity class 文件中获取那些 按钮并像下面这样设置 onclick Listener(将所有内容写在 onCreate()onResume 方法)。在 onClick 方法中做任何事情 你要。

      Button myButton1;
      Button myButton2;
      int a;
      protected void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.activity_home);
               myButton1 = (Button) findViewById(R.id.my_button1); 
    
               myButton1.setOnClickListener( new OnClickListener() {
    
                   @Override
                   public void onClick(View v) { a =1;
               }
    
                myButton2 = (Button) findViewById(R.id.my_button1);
                myButton2.setOnClickListener( new OnClickListener() {
    
                   @Override
                   public void onClick(View v) { a =2;
               }
    

有两种方法可以对按钮单击执行操作

  1. 第一种方法是在 Button 代码的布局 (xml) 文件中设置一个 android:OnClick = "methodName" 并在 java 访问该按钮的代码,如

    public void methodName(View v) {
        // Do what you want to perform on Button click
    }
    
  2. 在按钮后面执行某些操作的第二种方法是在 java 代码中访问该按钮并执行您想执行的操作

     Button button = findViewById(R.id.button);
     button.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                // Do what you want to perform on that button click
             }
         });