安卓事件

作者: 光明程辉 | 来源:发表于2020-02-29 21:10 被阅读0次

1、自定义内部类
2、匿名内部类
3、当前activity去实现事件接口
4、在布局文件xml中添加点击事件属性(使用频率非常高)

补充:
a、Android 在xml文件中 给某个控件声明 id 是: "@+/自定义名字" ,
获取是: "@/自定义的名字" , 例如: android:id="@id/btn1", 文本 android:text="@string/long_text" ,图片等。

b、安卓的View 的继承关系:


安卓的View继承关系.png

1、自定义内部类 MyClickListener

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 1、获取按钮(自定义内部类)
        Button btn = findViewById(R.id.btn1); // 通过 findViewById 去找索引
        // 2、注册按钮
        MyClickListener mclick1 = new MyClickListener();
        btn.setOnClickListener(mclick1);
    }

    // 3、内部类 -- 点击事件触发
    class MyClickListener implements View.OnClickListener {
        @Override
        public void onClick(View view) {
            Log.e("tag","点击了......");
        }
    }

xml文件

   <Button
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="按钮点击事件">
    </Button>

2、匿名内部类(就是 生成对象的时候才知道是什么类名)

做参数 传参的时候 new Xxxxclass 就是匿名对象了。

        Button btn2 = findViewById(R.id.btn1);
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("Tag","通过匿名内部类实现按钮点击");
            }
        });

3、当前activity去实现事件接口

自己写个接口,根据1中的“自定义内部类” 思想,我们可以看到只要是一个类都是可以 执行(implements)一个接口。那么为何自己的类 使用不是更好吗?是的,开工,跟着我实现这个接口吧。

//  implements View.OnClickListener 是自己添加的 要实现的接口
public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 定义一个按钮
        Button btn3 = findViewById(R.id.btn1);
        btn3.setOnClickListener(this);// this 指当前类

    }

    @Override
    public void onClick(View view) {
        Log.e("TAG","使用本类实现了OnClickListener");
    }

}

4、在布局文件xml中添加点击事件属性

xml文件是这样 --- 推荐给个ID

      <Button
        android:id="@+id/btn4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="在xml文件中绑定事件"
        android:onClick="myAction"/>
    <Button
        android:id="@+id/btn5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="在xml文件中绑定事件"
        android:onClick="myAction"/>
    //参数:被点击的控件对象 View
    public void myAction(View v){
        switch (v.getId()){
            case R.id.btn4:
                Log.e("TAG","通过xml绑定点击事件 btn4");
                break;
            case  R.id.btn5:
                Log.e("TAG","通过xml绑定点击事件 btn5");
                break;
        }
    }

demo效果:


最后一种经常使用.jpeg
疑惑?

为什么click里边都是 onClick(View view),我点击的是Button呀!
答:上面给了个View的继承关系,button也是继承View的。因为点击事件并不仅仅Button才有事件,其它UI控件也要,所以使用View更加合适。

总结:

1、如果多个按钮(点击事件)的操作差不多就使用自定义,可以减少代码,更加简洁。
2、如果某个按钮的事件是唯一的,那么使用 匿名内部类吧。(没有绝对,只有更好)
3、xml中绑定事件 经常使用。

相关文章

网友评论

    本文标题:安卓事件

    本文链接:https://www.haomeiwen.com/subject/cnamhhtx.html