zoukankan      html  css  js  c++  java
  • 实现两个接口

    public class Main extends Activity implements OnClickListener,OnCompletionListener

    一般、对按钮点击事件监听有两种方法去实现:
    一 种就是 :

    btn.setOnClickListener(new OnClickListener(
    @Override

    XXXXXXX

    ))

    第二种就是实现这个接口OnClickListener,那你当前的类就可以实现对按钮的监听啦,而且代码会比较规范,监听就全都在一个方法里面了:
    public class Main extends Activity implements OnClickListener,OnCompletionListener{
    @Override

    onCreate(){}

    @Override

    onClick(View view){
    int id = view.getId();
    swich(){
    case R.layout.btn1://你的逻辑;break;

    case R.layout.btn2://你的逻辑;break;
    }

     


    一、通过 匿名类 响应事件

    直接调用:/* 匿名类处理事件响应*/

    btn.setOnClickListener(new OnClickListener(){

    @override

    public void onClick(View v){

    相应事件

    }

    });

    二、通过 内部类 响应事件

    /* 内部类处理事件响应, */

    btn_login.setOnClickListener(new MyListener());

    /* 内部类作为事件监听器 */

    class MyListener implements OnClickListener {

    @Override

    public void onClick(View v) {

    Log.i(TAG,"内部类处理事件响应");

    }

    }



    public class MainActivity extends AppCompatActivity {

        private SensorManager mSensorManager;
        private  TextView tV;
        private Switch switchMotion;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            tV = findViewById(R.id.tv);
            switchMotion = findViewById(R.id.switch_motion);
            switchMotion.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {         // 开关按钮监听   (匿名内部类)
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if(isChecked) {
                          mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
           accelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
           magnetic = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
           mSensorManager.registerListener(new MySensorEventListener(), accelerometer, Sensor.TYPE_ACCELEROMETER);
           mSensorManager.registerListener(new MySensorEventListener(), magnetic, Sensor.TYPE_MAGNETIC_FIELD); //传感器监听  (内部类)
                    }else {

                    }
                }
            });
        }
        class MySensorEventListener implements SensorEventListener {     
            @Override
            public void onSensorChanged(SensorEvent event) {

            }

            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {

            }
        }
    }



    三、通过 Activity自身类 响应事件

    /* 自身处理事件响应,1.监听器设置为this代表的自身类、2.自身类实现事件监听接口、3.自身类添加接口为实现的方法 */

    活动需要继承implements OnClickListener该接口

    btn.setOnClickListener(this);

    @Override

    public void onClick(View v) {

    响应事件

    }


    public class MainActivity extends Activity implements SensorEventListener{      //activity自身类    //2.自身类实现事件监听接口
        private SensorManager sensorManager = null;
        private Sensor gyroSensor = null;
        private TextView vX;
        private Button button;
        private float[] angle = new float[3];
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mTxtValue = (TextView) findViewById(R.id.txt_value);

            // 获取传感器管理对象
            mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
            // 获取传感器的类型(TYPE_ACCELEROMETER:加速度传感器)
            mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        }

        @Override
        protected void onResume() {
            super.onResume();
            // 为加速度传感器注册监听器
            mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_GAME);      //1.监听器设置为this代表的自身类
        }

        @Override
        protected void onStop() {
            super.onStop();
            // 取消监听
            mSensorManager.unregisterListener(this);
        }

        // 当传感器的值改变的时候回调该方法
        @Override
        public void onSensorChanged(SensorEvent event) {         //3.自身类添加接口为实现的方法
            float[] values = event.values;
            StringBuilder sb = new StringBuilder();
            sb.append("X方向的加速度:");
            sb.append(values[0]);
            sb.append(" Y方向的加速度:");
            sb.append(values[1]);
            sb.append(" Z方向的加速度:");
            sb.append(values[2]);
            mTxtValue.setText(sb.toString());
        }

        // 当传感器精度发生改变时回调该方法
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {

        }
    }

    5种监听听事件处理方法对比总结

    1).通过设置UI组件的android:onClick属性,然后代码实现方法:此方法业务逻辑和UI耦合性太高,实际业务一般不用

    2).匿名类:一般只应用特定组件的特定业务响应

    3).内部类、4).外部类:可作为多个UI共同的事件处理,适用多个UI组件复用;当事件源要传递信息给事件监听器时则不太灵活,必须通过成员变量及构造方法

    5).Activity自身类:处理比较灵活,实际中用的最多

    6).当同一个UI对同一个事件注册多个监听器时,根据注册的顺序,最后注册的事件监听器优先触发,事件不再传递,最后触发的是通过UI设定的方法



    参考:https://www.jianshu.com/p/2acdcf940603
  • 相关阅读:
    解析XML
    事务
    js小工具
    plsql用过的流程语句
    查询语句
    存储过程
    用过的CRT命令
    mysql常用命令
    Spirng MVC demo 完整示例01 环境搭建
    jmeter多个http请求串联
  • 原文地址:https://www.cnblogs.com/xtxt1127/p/12441405.html
Copyright © 2011-2022 走看看