有两种方法可以处理按钮中的点击事件
- 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 中一样。