事件处理

用户在应用界面上执行各种操作时,应用程序需要为用户的动作提供响应,这种响应的过程就是事件处理

一.基于监听的事件处理机制(优先于基于回调的事件处理机制)

1三要素(Event Source(事件源),Event(事件),Event Listener(事件监听器))

实现方式

  1. 内部类实现

    public class EventActivity extends AppCompatActivity{
    private Button mBtnEvent;

     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_event);
         mBtnEvent = findViewById(R.id.btn_event);
         //TODO:通过内部类实现
         mBtnEvent.setOnClickListener(new OnClick());
         //内部类
         class OnClick implements View.OnClickListener{
             @Override
             public void onClick(View v) {
                 switch (v.getId()){
                     case R.id.btn_event:
                         ToastUtil.showMsg(EventActivity.this,"---click---");
                         break;
                 }
             }
         }
     }
    

    }

  2. 匿名内部类

    public class EventActivity extends AppCompatActivity{
    private Button mBtnEvent;

     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_event);
         //TODO:通过匿名内部类实现
         mBtnEvent.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 ToastUtil.showMsg(EventActivity.this,"---click---");
             }
         });
     }
    
  3. 通过事件源所在的类实现

    public class EventActivity extends AppCompatActivity implements View.OnClickListener {
     private Button mBtnEvent;
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_event);
         mBtnEvent = findViewById(R.layout.btn_event);
         mBtnEvent.setOnClickListener(EventActivity.this);//通过事件源所在的类实现
     }
     @Override
     public void onClick(View v) {
     switch (v.getId()) {
        case R.id.btn_event:
            ToastUtil.showMsg(EventActivity.this, "---click---");
            break;
      }
     }
    }
    
  4. 通过外部类(用的少)

    MyClickListener.java
    public class MyClickListener implements View.OnClickListener{
     private  Activity mActivity;
     public MyClickListener(Activity activity){
         this.mActivity = activity;
     }
     @Override
     public void onClick(View v) {
         ToastUtil.showMsg(mActivity,"---click---");
     }
    }
    

EventActivity.java

public class EventActivity extends AppCompatActivity {
    private Button mBtnEvent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_text_view);
        mBtnEvent.findViewById(R.layout.btn_event);
        mBtnEvent.setOnClickListener(new MyClickListener(EventActivity.this));
    }
}
  1. xml文件中绑定

    public class TextViewActivity extends AppCompatActivity {
     private Button mBtnEvent;
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_text_view);
     }
    
     public void btnclick(View v) {
         switch (v.getId()) {
             case R.id.btn_event:
                 ToastUtil.showMsg(EventActivity.this, "---click---");
                 break;
         }
     }
    }
    

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:orientation="vertical">
     <Button
         android:id="@+id/btn_event"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="click"
         android:textAllCaps="false"
         android:onClick="btnclick"/>
    </LinearLayout>
    

给同一事件源添加多个同种类型监听器,系统只会执行最后一个设置的监听器,其它的都不会执行,且xml中onclick属性设置的事件最先注册,若java文件还通过其它方式监听事件,则onclick绑定的事件不会执行。

基于回调的事件处理机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值