1 2 3 4 5 6 7 | 文字表述: 事件监听机制中由事件源,事件,事件监听器三类对象组成 处理流程如下: Step 1 :为某个事件源(组件)设置一个监听器,用于监听用户操作 Step 2 :用户的操作,触发了事件源的监听器 Step 3 :生成了对应的事件对象 Step 4 :将这个事件源对象作为参数传给事件监听器 step 5 :事件监听器对事件对象进行判断,执行对应的事件处理器(对应事件的处理方法) 归纳: 事件监听机制是一种委派式的事件处理机制,事件源(组件)事件处理委托给事件监听器 当事件源发生指定事件时,就通知指定事件监听器,执行相应的操作 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 1 )直接用匿名内部类 平时最常用的一种:直接setXxxListener后,重写里面的方法即可; 通常是临时使用一次,复用性不高! 实现代码如下:MainAcivity.java: package com.jay.example.innerlisten; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; import android.app.Activity; public class MainActivity extends Activity { private Button btnshow; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnshow = (Button) findViewById(R.id.btnshow); btnshow.setOnClickListener( new OnClickListener() { //重写点击事件的处理方法onClick() @Override public void onClick(View v) { //显示Toast信息 Toast.makeText(getApplicationContext(), "你点击了按钮" , Toast.LENGTH_SHORT).show(); } }); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 2 )使用内部类 使用优点:可以在该类中进行复用,可直接访问外部类的所有界面组件! 实现代码如下:MainAcivity.java: package com.jay.example.innerlisten; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; import android.app.Activity; public class MainActivity extends Activity { private Button btnshow; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnshow = (Button) findViewById(R.id.btnshow); //直接new一个内部类对象作为参数 btnshow.setOnClickListener( new BtnClickListener()); } //定义一个内部类,实现View.OnClickListener接口,并重写onClick()方法 class BtnClickListener implements View.OnClickListener { @Override public void onClick(View v) { Toast.makeText(getApplicationContext(), "按钮被点击了" , Toast.LENGTH_SHORT).show(); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 实现代码如下:MyClick.java: package com.jay.example.innerlisten; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; public class MyClick implements OnClickListener { private TextView textshow; //把文本框作为参数传入 public MyClick(TextView txt) { textshow = txt; } @Override public void onClick(View v) { //点击后设置文本框显示的文字 textshow.setText( "点击了按钮!" ); } } MainActivity.java package com.jay.example.innerlisten; import android.os.Bundle; import android.widget.Button; import android.widget.TextView; import android.app.Activity; public class MainActivity extends Activity { private Button btnshow; private TextView txtshow; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnshow = (Button) findViewById(R.id.btnshow); txtshow = (TextView) findViewById(R.id.textshow); //直接new一个外部类,并把TextView作为参数传入 btnshow.setOnClickListener( new MyClick(txtshow)); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 4 )直接使用Activity作为事件监听器 只需要让Activity类实现XxxListener事件监听接口,在Activity中定义重写对应的事件处理器方法 eg:Actitity实现了OnClickListener接口,重写了onClick(view)方法在为某些组建添加该事件监听对象 时,直接setXxx.Listener( this )即可 实现代码如下:MainAcivity.java: package com.jay.example.innerlisten; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; import android.app.Activity; //让Activity方法实现OnClickListener接口 public class MainActivity extends Activity implements OnClickListener{ private Button btnshow; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnshow = (Button) findViewById(R.id.btnshow); //直接写个this btnshow.setOnClickListener( this ); } //重写接口中的抽象方法 @Override public void onClick(View v) { Toast.makeText(getApplicationContext(), "点击了按钮" , Toast.LENGTH_SHORT).show(); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 5 )直接绑定到标签: 就是直接在xml布局文件中对应得Activity中定义一个事件处理方法 eg: public void myClick(View source) source对应事件源(组件) 接着布局文件中对应要触发事件的组建,设置一个属性:onclick = "myclick" 即可 实现代码如下:MainAcivity.java: package com.jay.example.caller; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //自定义一个方法,传入一个view组件作为参数 public void myclick(View source) { Toast.makeText(getApplicationContext(), "按钮被点击了" , Toast.LENGTH_SHORT).show(); } } main.xml布局文件: <LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android" xmlns:tools= "http://schemas.android.com/tools" android:id= "@+id/LinearLayout1" android:layout_width= "match_parent" android:layout_height= "match_parent" android:orientation= "vertical" > <Button android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:text= "按钮" android:onClick= "myclick" /> </LinearLayout> |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步