Android Button 注册点击事件

时间:2022-03-23 06:25:21

Android Button控件处理点击事件

总共有四种方式
第一种,个人认为最方便的一种,像HTML和JS那样直接注册

<Button
        android:id="@ id/btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="BUTTON"
        <!-- 在这里注册了onClick的回调函数 -->
        android:onClick="clicked"
        />

然后到Activity实现这个方法

public void clicked(View view) {
    // 需要执行的代码
}

第二种,通过在Activity中实现点击事件的接口,然后绑定其中onClick方法到指定的Button

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 根据id访问到指定的Button控件
        Button btn = findViewById(R.id.btn);
        // 注册点击监听,然后this指针会让它自己找到当前Activity下的onClick方法
        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        // 需要执行的代码
    }
}

第三种,不整体实现点击方法,而是在需要的时候直接实现方法

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = findViewById(R.id.btn);
        // 等于一个匿名内部类的形式
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 需要执行的代码
            }
        });
    }
}

第四种, 创建一个内部类,再和Button绑定其实例的对象

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = findViewById(R.id.btn);
        MyClickListener cli = new MyClickListener();
        btn.setOnClickListener(cli);
    }
    class MyClickListener implements View.OnClickListener {
        @Override
        public void onClick(View view) {
            // 需要执行的代码
        }
    }
}