Android 四种常用的监听器
什么是监听器?
1、监听器是个抽象类,它包含了一个事件触发时系统会去调用的函数
2、在子类中,根据您项目的需要重写这个函数
3、派生后的监听器需要绑定到按钮上,就像一个耳机可以发出声音,但您不去戴它,您是听不到它发出的声音的。一般的情况是这个按钮可能需要这个监听器,而另外一个按钮需要另外一个监听器,每个监听器各司其职,但功能相似时,也可以多个按钮共同绑定一个监听器。
第一种监听器:匿名内部类
实现方法: listener.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
}
});
.xml
<Button
android:id="@+id/listener"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="listener" />
.java
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button listener = (Button) findViewById(R.id.listener);
listener.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "我是匿名内部类", 0).show();
}
});
}
第二种监听器 xml监听器 (这种想控制Button的属性 例如setEnabled 还有双击的时候 不推荐使用这种 )
在.xml中加个onClick语句
.xml
<Button
android:id="@+id/listener"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="click"
android:text="listener" />
.java
public class Xml_listener_Activity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xml_listener);
}
public void click(View view){
Toast.makeText(this, "我是xml监听器", 0).show();
}
}
第三种监听器 activity本身作为监听器
这个把你的类实现了OnClickListener接口
.xml
<Button
android:id="@+id/listener"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="listener" />
.java
public class ActivityListenerActivity extends ActionBarActivity implements OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activity_listener);
TextView listener = (TextView) findViewById(R.id.listener);
listener.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
Toast.makeText(this, "我是activity本身作为监听器", 0).show();
}
}
第四种监听器 内部类作为监听器
.xml
<Button
android:id="@+id/listener"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="listener" />
.java
public class InsideListenerActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_inside_listener);
TextView list = (TextView) findViewById(R.id.listener);
mylistener listener=new mylistener();
list.setOnClickListener(listener);
}
class mylistener implements OnClickListener{
@Override
public void onClick(View arg0) {
Toast.makeText(InsideListenerActivity.this, "我是内部类作为监听器", 0).show();
}
}