以Button为例,监听事件的四种方式
(1)在XML布局文件中使用OnClick属性属性绑定事件。
布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/BtnClick"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="doClick"
android:text=" 点击我!"/>
</RelativeLayout>
Activity
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void doClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(this, "我被点击了!", Toast.LENGTH_SHORT).show();
}
}
其中布局文件中onClick属性中的值即是Activity中事件绑定的方法名。
(2)匿名内部类
布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/BtnClick"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=" 点击我!"/>
</RelativeLayout>
Activity
public class MainActivity extends Activity {
Button btnClick;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnClick = (Button) findViewById(R.id.BtnClick);
btnClick.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "我被点击了!", Toast.LENGTH_SHORT).show();
}
});
}
}
当Button较少的时候推荐使用此种方式,但是一定要import android.view.View.OnClickListener;
(3)内部类
布局文件和匿名内部类一样
Activity
public class MainActivity extends Activity {
Button btnClick;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnClick = (Button) findViewById(R.id.BtnClick);
btnClick.setOnClickListener(new ButtonClick(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
super.onClick(v);
}
});
}
class ButtonClick implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "我被点击了!", Toast.LENGTH_SHORT).show();
}
}
}
当按钮较多时,切需要实现同一个事件时推荐使用,到时候把它提取至外部类时也比较方便
(4)实现接口
布局文件和匿名内部类一样
public class MainActivity extends Activity implements OnClickListener{
Button btnClick;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnClick = (Button) findViewById(R.id.BtnClick);
btnClick.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "我被点击了!", Toast.LENGTH_SHORT).show();
}
}
按钮较多且它们不需要实现相同的事件时使用起来比较方便