📜  处理 Button 中的 Click 事件 |安卓

📅  最后修改于: 2021-10-20 11:13:36             🧑  作者: Mango

有两种方法可以处理按钮中的点击事件

  • 在 xml 布局中单击
  • 使用 OnClickListener

在 XML 布局中单击

当用户单击按钮时,Button 对象会收到一个点击事件。

要使单击事件起作用,请将android:onClick属性添加到 XML 布局中的 Button 元素。此属性的值必须是您要调用以响应单击事件的方法的名称。承载布局的 Activity 必须实现相应的方法。

笔记:
如果您在代码中使用此事件处理程序,请确保您的 MainActivity 中有该按钮。如果您在片段中使用此事件处理程序,它将不起作用,因为 onClick 属性仅适用于 Activity 或 MainActivity。

例子:

在 MainActivity 类中

/** Called when the user touches the button */
public void sendMessage(View view)
{
    // Do something in response to button click
}

确保您的 sendMessage 方法应具有以下内容:

  • 公开
  • 返回无效
  • 定义一个 View 作为它的唯一参数(这将是被点击的 View)

    使用 OnClickListener

    您还可以以编程方式而不是在 XML 布局中声明 click 事件处理程序。此事件处理程序代码是首选,因为它可以在活动和片段中使用。

    有两种方法可以以编程方式执行此事件处理程序:

    • 在您的活动或片段中实现 View.OnClickListener。
    • 创建新的匿名 View.OnClickListener。

    在您的活动或片段中实现 View.OnClickListener

    要在您的 Activity 或 Fragment 中实现View.OnClickListener ,您必须覆盖您的类上的onClick方法。

    首先,通过调用findViewById()方法将xml布局中的按钮链接到Java 。
    R.id.button_send指的是 XML 中的按钮。

    mButton.setOnClickListener(this);意味着您要为“在此实例上”的 Button 分配侦听器,此实例代表OnClickListener ,因此您的类必须实现该接口。

    
      
        

    主要活动代码:

    public class MainActivity extends AppCompatActivity
        implements View.OnClickListener {
        private Button mButton;
      
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
      
            mButton = findViewById(R.id.button_send);
            mButton.setOnClickListener(this);
        }
      
        @Override
        public void onClick(View view)
        {
            switch (view.getId()) {
            case R.id.button_send:
                // Do something
            }
        }
    }
    

    如果您有多个按钮点击事件,您可以使用 switch case 来确定点击了哪个按钮。

    创建匿名 View.OnClickListener

    通过调用findViewById()方法从 XML 链接按钮,并使用setOnClickListener()方法设置 onClick 侦听器。

    主要活动代码:

    public class MainActivity extends AppCompatActivity {
      
        private Button mButton;
      
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
      
            mButton = findViewById(R.id.button_send);
            mButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view)
                {
                    // Do something
                }
            });
        }
    }
    

    setOnClickListenerOnClickListener对象作为参数。基本上它在参数中创建一个匿名子类 OnClickListener 。

    当您可以使用匿名子类创建新线程时,这就像在Java一样。