实现两个接口

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
原文地址:https://www.cnblogs.com/xtxt1127/p/12441405.html