今天在公司发现要给一个布局中的多个按钮添加点击事件,每一个都需要setOnClickListener。导致代码可读性很差。如果在一个Layout 中有多个相同控件,我们可以采用下面这种方式:
步骤:
1、编写一个自定义类继承view.onClickListener。
class dialogListener implements View.OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.id_openCamera:
Toast.makeText(mContext, "打开相机", Toast.LENGTH_LONG).show();
dialog.dismiss();
openCamera();
break;
case R.id.id_openPhtots:
dialog.dismiss();
openPhotos();
break;
case R.id.id_hide:
dialog.dismiss();
break;
default:
break;
}
}
}
2、如果在给Dialog这样的Layout设置监听需要先inflateg该布局(可选)。
View viewDialog = View.inflate(mContext, R.layout.bottom_dialog_layout, null);
3、在该Activity中findViewById 。
dialog.setView(viewDialog, 0, 0, 0, 0);
LinearLayout linearLayout = (LinearLayout) viewDialog.findViewById(R.id.layout_dialog);
4、给找到的控件设置事件监听。
int childCount = linearLayout.getChildCount();
dialogListener listener = new dialogListener();
for (int i = 0; i < childCount; i++) {
View view = linearLayout.getChildAt(i);
if (view instanceof Button) {
view.setOnClickListener(listener);
}
}