您的位置:首页 > 移动开发 > Android开发

Android中封装View提供接口供点击事件回调的方法及使用

2016-08-30 14:30 555 查看
这里我们封装一个自定义的View,比如弹出框

public class OKCancelTipsDialog extends Dialog {

private Context context;
private String titleValue, contentValue, okValue, cancelValue;
private Button okBtn, cancelBtn;
private TextView titleTv, contentTv;
private DialogClickListenerInterface clickListenerInterface;

public interface DialogClickListenerInterface {

public void doOk();

public void doCancel();
}

public OKCancelTipsDialog(Context context, String titleValue,
String contentValue, String okValue, String cancelValue) {
super(context, R.style.DialogTheme);
this.context = context;
this.titleValue = titleValue;
this.contentValue = contentValue;
this.okValue = okValue;
this.cancelValue = cancelValue;
// this.confirmButtonText = confirmButtonText;
// this.cacelButtonText = cacelButtonText;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.setCancelable(false);// 设置点击屏幕Dialog不消失
init();
}

public void init() {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.dialog_view_ok_cancel_tips, null);
setContentView(view);

okBtn = (Button) view.findViewById(R.id.ok_btn);
cancelBtn = (Button) view.findViewById(R.id.cancel_btn);

titleTv = (TextView) view.findViewById(R.id.title_tv);
contentTv = (TextView) view.findViewById(R.id.content_tv);

titleTv.setText(titleValue);
contentTv.setText(contentValue);
okBtn.setText(okValue);
cancelBtn.setText(cancelValue);

okBtn.setOnClickListener(new clickListener());
cancelBtn.setOnClickListener(new clickListener());

Window dialogWindow = getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
DisplayMetrics d = context.getResources().getDisplayMetrics(); // 获取屏幕宽、高用
lp.width = (int) (d.widthPixels * 0.8); // 高度设置为屏幕的0.6
dialogWindow.setAttributes(lp);
}

public void setClicklistener(
DialogClickListenerInterface clickListenerInterface) {
this.clickListenerInterface = clickListenerInterface;
}

private class clickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int id = v.getId();
switch (id) {
case R.id.ok_btn:
clickListenerInterface.doOk();
break;
case R.id.cancel_btn:
clickListenerInterface.doCancel();
break;
}
}

};

}


那么对于公共的一个View,其点击事件怎么处理呢?不可能直接在此View里面处理点击事件,那么我们就可以提供一个外部接口,点击哪个按钮,就调用接口相对于的抽象方法。

在需要使用对话框的地方:

OKTipsDialog logInOtherDivice = new OKTipsDialog(MainActivity.this, "下线通知",
"你的账号已经在其它设备登陆,如非本人操作,请及时修改密码", "确定");
logInOtherDivice.setClicklistener(new OKClickListenerInterface() {// 设置监听回调

@Override
public void doOk() {
// 退出登陆
SharedPreferencesUtils.removeParam(MainActivity.this, "Token");
//退出环信登陆 此方法为同步方法,里面的参数 true 表示退出登录时解绑 GCM 或者小米推送的 token
EMClient.getInstance().logout(true);

Intent goLoginActivity = new Intent(MainActivity.this, LoginActivity.class);
startActivity(goLoginActivity);
MainActivity.this.finish();
MainActivity.this.overridePendingTransition(R.anim.anim_activity_left_in,
R.anim.anim_activity_right_out);
}
});
logInOtherDivice.show();

当然这里的setClicklistener,也可以直接在构造方法中就传递一个,OKClickListenerInterface,然后在监听里面做我们需要的事情即可。

总结:首先自定义一个View,然后View里面有各种点击事件,我们可以定义一个接口,然后在接口里面定义对应的抽象方法,比如点击A按钮,就调用接口的A方法,点击B按钮,就调用接口的B方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Dialog
相关文章推荐