• 实现两个接口


    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
  • 相关阅读:
    SQOOP的安装配置_Linux伊甸园开源社区24小时滚动更新开源资讯,全年无休!
    Cloudera's Hadoop Demo VM for CDH4 Cloudera Support
    海量文档查同或聚类问题 Locality Sensitive Hash 算法
    part 1: resemblance with the jaccard coefficient
    计算机科学中最重要的32个算法zz
    详细的tfidf构建过程实例(转)
    2012 Beijing Google Dev FastDay(11/03/2012) 移动新观察
    百度技术沙龙
    Hive官方手册翻译(Getting Started) 实践检验真理 51CTO技术博客
    《周末休闲吧》:教你如何玩车震——车震全程攻略!_周末休闲吧_百度空间
  • 原文地址:https://www.cnblogs.com/xtxt1127/p/12441405.html
Copyright © 2020-2023  润新知