1. Button和ImageButton的onclick事件:
通过自身的.setOnClickListener(OnClickListener)方法添加点击事件。
2. 所有控件都有一个onclick的事件,通过点击事件的监听可以实现点击按钮之后要发生的动作。监听事件实现的三种写法:匿名内部类的实现、独立类的实现、实现接口的方式来实现。
3. 匿名内部类的实现:
就是在setOnclickListener()函数中新建OnClickListener,然后重写它的onClick函数:
loginButton=(Button)findViewById(R.id.button1);
// 匿名内部类的特点就是直接在setOnClickListener上new一个匿名内部类:
loginButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
System.out.println("我的Button被点击了");
}
});
}
4. 外部类监听点击事件的实现:
1) OnClickListener是一个接口,不能继承(extends),可以实现(implement)。
2) 通过MyOnClickListener来实现OnClickListener。
3) 对于bt1而言,点击时不仅调用自身的onClick事件:
Toast.makeText(MainActivity.this, "bt1要执行的逻辑", 1).show();
同时还调用父类的onClick事件:
super.onClick(arg0);
由它去执行外部类MyOnClickListener中的onClick事件。
4) 源代码:
package com.example.hanxiaoxiao;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
private Button bt1;
private Button bt2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt1 = (Button)findViewById(R.id.button2);
bt2 = (Button)findViewById(R.id.button3);
// 外部类监听的特点是将实现写在外边单独来实现:
bt1.setOnClickListener(new MyOnClickListener(){
@Override
public void onClick(View arg0) {
// 调用父类的OnClick事件。
super.onClick(arg0);
// 自己本身的OnClick事件。
Toast.makeText(MainActivity.this, "bt1要执行的逻辑",1).show();
}
});
}
}
// MyOnClickListener属于父类。
class MyOnClickListener implements OnClickListener{
@Override
public void onClick(View arg0) {
Log.i("tag","父类的onClick事件");
}
}
外部类监听的方式的好处是:当有多个Button控件拥有同样的父类外部类时,有共同点,也有不同点:
package com.example.hanxiaoxiao;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
private Button bt1;
private Button bt2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt1 = (Button)findViewById(R.id.button2);
bt2 = (Button)findViewById(R.id.button3);
bt1.setOnClickListener(new MyOnClickListener(){
@Override
public void onClick(View arg0) {
// 调用父类的OnClick事件。
super.onClick(arg0);
Toast.makeText(MainActivity.this, "bt1要执行的逻辑", 1).show();
}
});
bt2.setOnClickListener(new MyOnClickListener(){
@Override
public void onClick(View arg0) {
super.onClick(arg0);
Toast.makeText(MainActivity.this, "bt2要执行的逻辑", 1).show();
}
});
}
}
class MyOnClickListener implements OnClickListener{
@Override
public void onClick(View arg0) {
// 让所有使用当前外部类的点击事件的按钮都要做出一个动作,改变button本身的透明度。
arg0.setAlpha(0.5f);
}
}
效果是点击按钮时,该按钮显示逻辑框,同时按钮透明度降低。
通过这种方式可以让不同的按钮在点击后有父类相同的反映,同时也有自己特有的反映。
5.接口方式监听按钮点击事件
步骤一:添加OnClickListener实现,然后点击add...:
// 变化在这里,增加OnClickListener实现
public class MainActivity extends Activity implements OnClickListener{
随后会在该函数里面自动添加:
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
}
当该接口绑定了一个按钮时,点击按钮的时候刚刚自动添加的这个onClick就会触发。
步骤二:绑定按钮。
// 变量实例化
imgBt = (ImageButton)findViewById(R.id.imageButton1);
// 通过实现一个接口的方式实现监听事件,这里只需要this即可。这样就绑定好了
imgBt.setOnClickListener(this);
源代码:
package com.example.hanxiaoxiao;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.Toast;
// 该方法的特点是直接在当前类上实现OnClickListener,该类下会有一个对应的方法onClick,然后通过this直接访问:
// 变化在这里,增加OnClickListener实现
public class MainActivity extends Activity implements OnClickListener{
// 创建一个变量
private ImageButton imgBt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 变量实例化
imgBt = (ImageButton)findViewById(R.id.imageButton1);
// 通过实现一个接口的方式实现监听事件,这里只需要this即可。这样就绑定好了
imgBt.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Log.i("tag", "接口方式监听");
}
}