Button设置监听的三种方式

时间:2025-03-14 08:37:06

Button 是继承自TextView

基本监听步骤:
1、写布局
2、在Activity的onCreate中初始化控件
3、定义监听类
4、设置监听
5、填写监听实现方法
点击监听:onClickListener

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

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

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

一次性的
(new OnClickListener() {
    @Override
    public void onClick(View v) {
    Button b = (Button) v;
    (());
    }
});

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

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

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

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

    @Override
    public void onClick(View v) {
    Button b = (Button) v;
    (());
    }
}

多个视图共享监听器:

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

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

    @Override
    public boolean onLongClick(View v) {
        // 视图被长按之后做的事情
        (" 按钮被长按了 ");
        //false 表示不拦截事件,可以向下传递
        //true 表示拦截了事件,到此为止
        return true;
    }