一、实现button点击事件的方法
1、匿名内部类
2、外部类(独立类)
3、实现OnClickListener接口
4、添加XML属性
按钮:
<ImageButton
android:id="@+id/scanButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:background="#0000"
android:layout_gravity="center_vertical"
app:srcCompat="@drawable/ic_scan" />
1、匿名内部类: 优势: 1)不需要重新写一个类,直接在new的时候去实现想实现的方法,很方便。
2)当别的地方都用不到这个方法的时候使用匿名内部类
3)高内聚,高内聚是设计原则之一,匿名内部类的特性之一就是拥有高内聚。
不足: 1)当别的地方也需要同样的一个方法时还要重新再在那个地方写一次匿名内部类,这样使得代码的冗余性很高。
2)不方便后期的维护
public class MainAsnActivity extends AppCompatActivity {
private static final String TAG = "test";
private ImageButton scanButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_asn_activity);
scanButton = findViewById(R.id.scanButton);
scanButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d(TAG, "onClick: 按钮被点击");
}
});
}
}
2、独立类(外部类): 优势: 1)一定情况下可以方便维护
2)可以降低代码的冗余性,可以同时使用到多个地方
不足: 1)当只使用一次时浪费资源,程序的性能不高
2)当有很多个方法时代码的可读性不高,此时不方便维护
public class MainAsnActivity extends AppCompatActivity {
private static final String TAG = "test";
private ImageButton scanButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_asn_activity);
scanButton = findViewById(R.id.scanButton);
scanButton.setOnClickListener(new scanButtonClick(this));
}
package com.example.bee.Util;
import android.content.Context;
import android.util.Log;
import android.view.View;
public class scanButtonClick implements View.OnClickListener {
private static final String TAG = "test";
private Context context;
public scanButtonClick(Context ct){
this.context=ct;
}
@Override
public void onClick(View view) {
Log.d(TAG, "onClick: 按钮被点击");
}
}
3、实现OnClickListener接口: 与独立类实现的原理是一样的,优点和缺陷也是大径相同的,实现OnClickListener接口的时候实现它其中的onClick方法
public class MainAsnActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = "test";
private ImageButton scanButton;
private Button allReceiveButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_asn_activity);
scanButton = findViewById(R.id.scanButton);
scanButton.setOnClickListener(this);
}
@Override
public void onClick(View view) {
Log.d(TAG, "onClick: 扫描按钮被点击");
}
}
4、添加XML属性: 优势:更加便捷,代码量能够减少
不足:每一次维护的时候都要去XML里面改源码,维护麻烦
<ImageButton
android:id="@+id/scanButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:background="#0000"
android:layout_gravity="center_vertical"
app:srcCompat="@drawable/ic_scan"
android:onClick="scanBtn"/>
 
|