监听事件处理机制几种形式:
内部类形式实现监听器
匿名内部类形式实现监听器
类本身实现监听器
外部类实现监听器(因为用的不是很多,在此不讲述)
常用的几种监听接口:
View.OnClickListener (单击事件监听器必须实现的接口)
View.OnCreateContextMenuListener (创建上下文菜单事件)
View.OnFocusChangeListener (焦点改变事件)
View.OnKeyListener (按键事件监听器)
View.OnLongClickListener (长按事件监听器)
View.OnTouchListener (触摸屏事件监听器)
采用基于监听事件处理机制来实现分为4个步骤:
1.获得事件源
2.确定事件
3.实现监听器
4.绑定监听器到事件源上
在此以OnClickListener单击事件为例使用intent来实现页面的跳转
一、内部类形式实现监听
<TextView
//id值
android:id="@+id/test2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="内部类"
android:gravity="center"
android:textSize="20dp"
android:textColor="#fff"/>
public class MainActivity extends AppCompatActivity{
//定义一个TextView对象
private TextView textView2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获得事件源
textView = findViewById(R.id.test2);
//确定事件为点击事件,绑定监听器到事件源
textView.setOnClickListener(new myListener());
}
//内部类实现页面跳转
private class myListener implements View.OnClickListener {
@Override
public void onClick(View v) {
//采用显示Intent启动第二个页面
startActivity(new Intent(MainActivity.this,internalActivity.class));
}
}
}
二、匿名内部类实现
<TextView
android:id="@+id/test3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="匿名内部类"
android:gravity="center"
android:textSize="20dp"
android:textColor="#fff"/>
public class MainActivity extends AppCompatActivity {
private TextView textView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获得事件源
textView1 = findViewById(R.id.test3);
//匿名内部类实现跳转 (实现监听器,绑定监听器到事件源要同步进行)
textView1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,anonymousActivity.class));
}
});
}
}
三、类本身实现监听器
<TextView
android:id="@+id/test4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="类本身打开浏览器"
android:gravity="center"
android:textSize="20dp"
android:textColor="@color/colorWhite"/>
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private TextView textView2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获得事件源
textView2 = findViewById(R.id.test4);
//绑定监听器到事件源
textView2.setOnClickListener(this);
}
//类本身实现 浏览器跳转
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.test4:
//采用隐式intent
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
break;
}
}
}
总结:
可根据不同的情况选择不同的事件处理机制来解决问题。