当用户在应用界面上执行各种操作时,应用程序需要为用户的动作提供响应,这种响应的过程就是事件处理。
1.监听三要素
Event Source事件源
Event 事件
Event Listener 事件监听器
示例1:
bt2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,ToastActivity.class);
startActivity(intent);
}
});
bt2是事件源,View.OnClickListener()是事件监听器
示例2:
bt2.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch(motionEvent.getAction()){
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_UP:
break;
}
return false;
}
});
bt2是事件源,View.OnTouchListener()是事件监听器,MotionEvent motionEvent是发生的事件
2.实现监听事件的方法:
1.通过内部类实现
public class EventActivity extends AppCompatActivity {
Button bt1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_event);
bt1=findViewById(R.id.bt_event1);
//内部类实现
bt1.setOnClickListener(new onclick());
}
//定义一个内部类来实现点击
class onclick implements View.OnClickListener{
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.bt_event1:
ToastUtil.showMessage(EventActivity.this,"click...");
break;
}
}
}
}
2.通过匿名内部类实现
public class EventActivity extends AppCompatActivity{
Button bt1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_event);
bt1=findViewById(R.id.bt_event1);
//匿名内部类
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ToastUtil.showMessage(EventActivity.this,"click...");
}
});
}
}
3.通过事件源所在类实现
public class EventActivity extends AppCompatActivity implements View.OnClickListener {
Button bt1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_event);
bt1=findViewById(R.id.bt_event1);
//通过事件源所在类实现
bt1.setOnClickListener(EventActivity.this);
}
public void onClick(View v){
switch (v.getId()){
case R.id.bt_event1:
ToastUtil.showMessage(EventActivity.this,"click...");
break;
}
}
}
//需要注意的是相当于给了一个原生的函数,需要继承view中的onclick方法
4.通过外部类实现
需要在外部定义一个类来引用
创建一个MyclickListener类
package com.example.scrollview;
import android.app.Activity;
import android.view.View;
import com.example.scrollview.util.ToastUtil;
public class MyclickListener implements View.OnClickListener {
Activity Mactivity;
public MyclickListener(Activity activity){
this.Mactivity=activity;
}
@Override
public void onClick(View view) {
ToastUtil.showMessage(Mactivity,"click...");
}
}
然后进行引用
public class EventActivity extends AppCompatActivity {
Button bt1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_event);
bt1=findViewById(R.id.bt_event1);
//通过外部类来实现
bt1.setOnClickListener(new MyclickListener(EventActivity.this));
}
}
5.布局文件中onClick属性(针对点击事件)
在布局文件中先定义属性
<Button
android:id="@+id/bt_event1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Click me"
android:textSize="20sp"
android:onClick="show"/>
然后在对应的activity中写响应函数
public class EventActivity extends AppCompatActivity{
Button bt1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_event);
}
//布局文件中onClick属性(针对点击事件)
public void show(View v){
switch (v.getId()){
case R.id.bt_event1:
ToastUtil.showMessage(EventActivity.this,"click...");
break;
}
}
}
3.提出疑问:给同一个事件源添加多个同种类型监听器会怎么样?
答:系统响应最后一个监听器,在布局中设置的监听器是第一个监听器