本文是以前整理的android 控件监听事件实现的几种写法。
目的:为了自己以后方便查阅,分享给没空做整理的同仁。
-
匿名内部类的实现|
-
实现接口的方式实现
-
独立类的实现
-
属性直接指定的方式实现
匿名内部类的实现--
最为经常被大家使用的,优点
public class Main3Activity extends AppCompatActivity {
ToggleButton tbtn_swift;
ImageButton img_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
init_view();
}
private void init_view() {
tbtn_swift = (ToggleButton) findViewById(R.id.tbtn_swift);
tbtn_swift.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
img_btn = (ImageButton) findViewById(R.id.img_btn);
img_btn.setBackgroundResource( isChecked ? R.drawable.on:R.drawable.off);
}
});
}
}
实现接口的方式实现--
多个控件需要同时实现某一个接口时,比较常用,优点代码简洁
//Main3Activity类实现了View.OnClickListener接口
public class Main3Activity extends AppCompatActivity implements View.OnClickListener {
ImageButton img_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
init_view();
}
private void init_view() {
img_btn = (ImageButton) findViewById(R.id.img_btn);
img_btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Toast.makeText(Main3Activity.this,"你点击到了图片按钮",Toast.LENGTH_LONG).show();
}
}
独立类的实现--
相同接口有需要多种实现,多种实现有共同的业务逻辑,也独特的业务逻辑时。优点减少重复代码,便于维护。
public class MainActivity extends AppCompatActivity {
Button btn_send;
Button btn_stop;
Button btn_nono;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init_view();
}
private void init_view() {
//独立类的处理+自己的独特处理
btn_send = (Button) findViewById(R.id.btn_send);
btn_send.setOnClickListener(new MyOnClickListener(){
@Override
public void onClick(View v) {
super.onClick(v);
System.out.println("这是我独特的处理");
}
});
//屏蔽独立类的处理
btn_stop = (Button) findViewById(R.id.btn_stop);
btn_stop.setOnClickListener(new MyOnClickListener(){
@Override
public void onClick(View v) {
//super.onClick(v); 不调用独立类
System.out.println("我屏蔽了独立类的公共处理,用自己的处理");
}
});
btn_nono = (Button) findViewById(R.id.btn_nono);
//仅仅用独立类的处理方式
btn_nono.setOnClickListener(new MyOnClickListener());
}
}
//独立类实现View.OnClickListener接口
class MyOnClickListener implements View.OnClickListener{
@Override
public void onClick(View v) {
System.out.println("ok===========");
}
}
属性直接指定的方式实现(不需要为控件设置id属性)--
为某个控件直接指定事件的处理方法,优点快捷。
布局资源文件中定义
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="扫描二维码"
android:id="@+id/btn_scan"
android:onClick="scan" />
对应代码实现
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//直接调用第三方ZXing库的api进行扫描
public void scan(View view){
Toast.makeText(MainActivity.this,"你点击了。。。",Toast.LENGTH_LONG).show();
}
}
最后感谢今日头条特供分享平台,我的头条号刚刚开通的时间才几天,还是新手不足之处也请客官多多谅解。要是大伙觉得还可以,帮忙给个赞,也欢迎评论。
分享是一种美德,牵手是一种生活方式。