您的位置:首页 > 其它

Button设置监听的三种方式

2017-10-14 17:13 337 查看

Button 是继承自TextView

基本监听步骤:

1、写布局

2、在Activity的onCreate中初始化控件

3、定义监听类

4、设置监听

5、填写监听实现方法

点击监听:onClickListener

1、定义监听的实现类
class BtnClickListener implements OnClickListener{
/**
*  当监听的视图被点击时触发 , 参数 v 表示被点击的对象
*/
@Override
public void onClick(View v) {
count++;
tv.setText(" 点击了 "+count+" 次 ");
}
}

2 、对视图设置监听器对象
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.m_tv);
// 从布局中获取视图对象
Button btn = (Button) findViewById(R.id.m_btn);
// 创建监听器
BtnClickListener l = new BtnClickListener();
// 设置按钮的点击监听
btn.setOnClickListener(l);
}


监听的第二种设置 – 匿名内部类

一次性的
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Button b = (Button) v;
tv.setText(b.getText());
}
});

使用成员变量实现共享监听器
// 按钮的点击监听器
private OnClickListener mClick = new OnClickListener() {
@Override
public void onClick(View v) {
Button b = (Button) v;
tv.setText(b.getText());
}
};

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
// 使用匿名内部类
btn2.setOnClickListener(mClick);
...
}


监听器的第三种设置方式,可以直接在 Activity (视图处理的类)上直接实现 OnClickListener ,重写 onClick 方法

public class MainActivity extends Activity implements OnClickListener {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
findViewById(R.id.m_btn2).setOnClickListener(this);
...
}

@Override
public void onClick(View v) {
Button b = (Button) v;
tv.setText(b.getText());
}
}


多个视图共享监听器:

可以使用 id 来区分
@Override
public void onClick(View v) {
// 获取被点击的视图的 id
switch (v.getId()) {
case R.id.m_btn:
tv.setText(" 第一个按钮被点击 ");
break;
case R.id.m_btn2:
tv.setText("ABC 123");
break;
}
}


长按监听

实现 OnLongClickListener ,重写 onLongClick(View v) 方法

@Override
public boolean onLongClick(View v) {
// 视图被长按之后做的事情
tv.setText(" 按钮被长按了 ");
//false 表示不拦截事件,可以向下传递
//true 表示拦截了事件,到此为止
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: