Android控件笔记——监听按钮点击事件

onClick事件:

    1、Button,ImageButton都拥有onClick事件,由自身的.setOnClickListener(OnClickListener)方法添加点击事件;

    2、所有的控件都有onClick事件,并不仅仅是按钮控件有;

    3、通过点击事件的监听可以实现点击按钮之后要发生什么动作。

监听事件实现的几种写法:

    1、匿名内部类的实现;

public class MainActivity extends Activity {

	private Button loginButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /*
         * 初始化当前所需要的控件
         * 用findViewById---返回的是一个View的对象
         * findViewById是如何找到对应的View的Id呢?
         */
        loginButton=(Button) findViewById(R.id.button1);
        
        //监听事件通过第一种方法实现:匿名内部类
        loginButton.setOnClickListener(new OnClickListener() {
			
			public void onClick(View arg0) {
				//在当前onClick方法中监听点击Button的动作
				System.out.println("我的Button被点击了");
				
			}
		});             
    }   
}

    2、独立类的实现;

public class MainActivity extends Activity {

	private Button loginButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /*
         * 初始化当前所需要的控件
         * 用findViewById---返回的是一个View的对象
         * findViewById是如何找到对应的View的Id呢?
         */
        loginButton=(Button) findViewById(R.id.button1);
        
        //独立类的写法
        loginButton.setOnClickListener(new MyOnClickListener(){
        	public void onClick(View arg0) {
        		//调用父类的onClick
        		super.onClick(arg0);
        		Toast.makeText(MainActivity.this, "button", 1).show();
        	};
        } );        
    }   
}
//OnClickListener是一个接口,所以不能继承
class MyOnClickListener implements OnClickListener{

	@Override
	public void onClick(View arg0) {
		// TODO Auto-generated method stub
		Log.i("tag","父类的onClick事件");
	}
	
}

 这样写的好处是,当我有很多歌按钮,这些按钮在执行自己独有的操作的时候,还需要执行一个相同的操作,那么这个相同的操作就可以写在外部类的逻辑中。例如,我当我点击按钮的时候我希望我点击的这个按钮变成半透明,我们就可以把半透明的代码写在独立类中。

public class MainActivity extends Activity {

	private Button loginButton1;
	private Button loginButton2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /*
         * 初始化当前所需要的控件
         * 用findViewById---返回的是一个View的对象
         * findViewById是如何找到对应的View的Id呢?
         */
        loginButton1=(Button) findViewById(R.id.button1);
        loginButton2=(Button) findViewById(R.id.button2);
        //独立类的写法
        loginButton1.setOnClickListener(new MyOnClickListener(){
        	public void onClick(View arg0) {
        		//调用父类的onClick
        		super.onClick(arg0);
        		Toast.makeText(MainActivity.this, "button1", 1).show();
        	};
        } );  
        
        loginButton1.setOnClickListener(new MyOnClickListener(){
        	public void onClick(View arg0) {
        		//调用父类的onClick
        		super.onClick(arg0);
        		Toast.makeText(MainActivity.this, "button2", 1).show();
        	};
        } ); 
    }   
}
//OnClickListener是一个接口,所以不能继承
class MyOnClickListener implements OnClickListener{

	@Override
	public void onClick(View arg0) {
		arg0.setAlpha(0.5f);	
	}	
}

    3、实现接口的方式来实现。

public class MainActivity extends Activity implements OnClickListener {

	private Button loginButton1;
	private ImageButton imagBt;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /*
         * 初始化当前所需要的控件
         * 用findViewById---返回的是一个View的对象
         * findViewById是如何找到对应的View的Id呢?
         */
        loginButton1=(Button) findViewById(R.id.button1);
        imagBt=(ImageButton) findViewById(R.id.imageButton1);
        
        //通过实现一个接口的方式实现监听事件
        loginButton1.setOnClickListener(listener);
        imagBt.setOnClickListener(listener);
        
    }
    
    //实现OnClickListener接口
    OnClickListener listener=new OnClickListener() {
		
		@Override
		public void onClick(View arg0) {
			// TODO Auto-generated method stub
			Toast.makeText(MainActivity.this, "Click", 1).show();
		}
	};

	@Override
	public void onClick(View arg0) {
		Log.i("tag","Hello");
	}   
}

补充:

    1、其实我们看到的是Botton,其实他们都是View,也就是说View是所有控件的父类。

    2、findViewById---返回的是一个View的对象,所有在src文件夹下的资源都会在R文件中有唯一的Id,此函数就是通过R文件找到的对应的button。

public static final int button1=0x7f080000;

    所以我们访问R.id.button1访问的就是它对应的地址。

    3、OnClickListener是一个接口,以上三种方式是通过不同的方法实现这个接口并加以利用的过程,方法一是匿名内部类实现,方法二是通过外部独立类实现,方法三是在当前类内部实现接口。

转载于:https://my.oschina.net/CoderBleak/blog/673800

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值