一共有四种监听方式:
1.创建内部类
创建内部类,implements View.OnClickListener,并重写其onClick(View view)方法。
public class SendBroadcastActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sendbroadcast_layout); Button btn = (Button)findViewById(R.id.addressbook_btn_delete); btn.setOnClickListener(new MyButtonListener()); } //内部类 class MyButtonListener implements View.OnClickListener{ public void onClick(View view){ //重写该方法,将在绑定的按钮被点击时调用,view对象为绑定的空阿金 } } }
2.创建匿名内部类
public class SendBroadcastActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sendbroadcast_layout); Button btn = (Button)findViewById(R.id.addressbook_btn_delete); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //重写方法 } }); } }
3.Activity直接实现监听器接口
implements View.OnClickListener,然后重写其onClick(View view)方法。
public class AddressBookActivity extends AppCompatActivity implements View.OnClickListener{ private Button mBtnAdd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.addressbook_layout); init(); } //初始化方法 private void init(){ mBtnAdd = (Button)findViewById(R.id.addressbook_btn_add); mBtnAdd.setOnClickListener(this); } public void onClick(View v){ //重写方法内容 } }
4. XML方式
1)第一步,在XML布局文件汇中为控件添加onClick属性:android:onClick="方法名",
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:onClick="send" android:layout_marginTop="50dp" android:text="发送消息"/>
2)第二步,在对应的Activity中,创建一个以onClick属性值为名字的方法,修饰符为public,传入的参数为View
public void send(View view){ Intent intent = new Intent(); intent.setAction("Intercept_Stitch"); //参数1为意图对象,参数2为指定接收者权限 sendOrderedBroadcast(intent,null); }
内部类和匿名内部类在开发中最常使用。
5. 为多个控件添加监听器
使用switch(v.getId())匹配。
public void onClick(View v) { //...... switch (v.getId()) { case R.id.musicplayer_tv_paly: if (file.exists() && file.length() > 0) { binder.play(path); } else { Toast.makeText(this, "找不到音乐文件", Toast.LENGTH_SHORT).show(); } break; case R.id.musicplayer_tv_pause: binder.pause(); break; default: break; } }