您的位置:首页 > 移动开发 > Android开发

Android入门(2)——点击事件的三种方式监听方式

2015-07-03 10:06 651 查看
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", "接口方式监听");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: