Android处理 Button 中的点击事件

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

  • xml布局中的onclick
  • 使用 OnClickListener

XML 布局中的 Onclick

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

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

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

例子:

<Button xmlns:android="http:// schemas.android.com/apk/res/android"
	android:id="@+id/button_send"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:text="@string/button_send"
	android:onClick="sendMessage"
/>

在 MainActivity 类中

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

确保您的 sendMessage 方法应具有以下内容:
公开
返回无效
定义一个视图作为它的唯一参数(这将是被点击的视图)

使用 OnClickListener

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

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

  • 在 Activity 或 Fragment 中实现 View.OnClickListener。
  • 创建新的匿名 View.OnClickListener。

在 Activity 或 Fragment 中实现 View.OnClickListener

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

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

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

<RelativeLayout
	xmlns:android="http:// schemas.android.com/apk/res/android"
	xmlns:app="http:// schemas.android.com/apk/res-auto"
	xmlns:tools="http:// schemas.android.com/tools"
	android:layout_width="match_parent"
	android:layout_height="match_parent"
	tools:context="com.example.sample.MainActivity" >

	<Button
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:id="@+id/button_send" />
</RelativeLayout>

主要活动代码:

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

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

主要活动代码:

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

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

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