Android的控件有很多,这里以添加button的点击事件为例。
- 在布局文件中为button指定点击方法
布局文件activity_main.xml文件中,部分代码如下:
<!--onClick属性值设置为点击方法名-->
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:text="Click Me"
android:onClick="click"/>
MainActivity.java部分代码:
/**
* 实现控件中的点击方法
* @param view
*/
protected void click(View view){
//输出信息
Toast.makeText(this,"你点击了按钮",Toast.LENGTH_SHORT).show();
return;
}
- 创建内部类
使用这种点击事件的好处是,按钮比较多时onClick方法中可以用Switch语句来控制不同的点击事件逻辑。
activity_main.xml文件部分代码:
<!--设置控件id-->
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:text="Click Me"
android:id="@+id/buttonClick"/>
MainActivity.java部分代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通过findViewById方法获取button的引用,并转换为Button对象。
Button buttonClick = (Button) findViewById(R.id.buttonClick);
//为buttonClick设置监听事件,参数为内部类对象。
buttonClick.setOnClickListener(new MyButton());
}
/**
* 创建内部类MyButton,用于实现监听接口。
*/
private class MyButton implements View.OnClickListener{
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"你点击了这个按钮",Toast.LENGTH_SHORT).show();
return;
}
}
- 主类中实现OnClickListener接口
还可以在主类中实现该接口,通过Switch语句判断哪个按钮被点击。
值得注意的是这里的参数this代表的是该Activity的引用。由于Activity的方法中实现了OnClickListener接口,这里this代表了OnClickListener的引用。
MainActivity.java部分代码:
//类实现了监听器接口
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通过findViewById方法获取button的引用,并转换为Button对象。
Button buttonClick = (Button) findViewById(R.id.buttonClick);
//按钮绑定接口。
buttonClick.setOnClickListener(this);
}
/**
* 重写实现监听接口的onClick方法。
* @param v
*/
@Override
public void onClick(View v) {
Toast.makeText(this,"你点击了此按钮",Toast.LENGTH_SHORT).show();
return;
}
}
- 匿名内部类
此种方法适用于按钮较少或者只有一个按钮时,直接创建OnClickListener的匿名内部类传入按钮的setOnClickListener()参数中。
MainActivity.java中部分代码如下:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通过findViewById方法获取button的引用,并转换为Button对象。
Button buttonClick = (Button) findViewById(R.id.buttonClick);
//设置匿名内部类实现点击事件
buttonClick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"你点击了此按钮",Toast.LENGTH_SHORT).show();
return;
}
});
实现OnClickListener接口时该接口在Android的两个包下都有,为按钮设置点击事件要导入android.view.View包。而非android.content.DialogInterface。