Android中封装View提供接口供点击事件回调的方法及使用
2016-08-30 14:30
555 查看
这里我们封装一个自定义的View,比如弹出框
那么对于公共的一个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方法。
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方法。
相关文章推荐
- Android中使用回调接口实现自定义view的点击事件
- Android中Recyclerview使用7----条目中按钮点击事件,在activity中调用(接口回调)
- 接口的使用—自定义view点击事件的接口回调
- 封装好的Android对话框Dialog,包含了丰富的dialog样式、点击事件数据回传接口。直接调用封装好的方法即可操作dialog
- (4.1.40)android之View坐标系(view获取自身坐标的方法和点击事件中坐标的获取)
- 【Android 应用开发】 自定义组件 宽高适配方法, 手势监听器操作组件, 回调接口维护策略, 绘制方法分析 -- 基于 WheelView 组件分析自定义组件
- 使用接口回调实现--自定义控件的点击事件
- spring RowMapper回调接口的使用 以及jdbc模板提供的queryfor系列的方法摘要
- Android使用RecyclerView实现自定义列表、点击事件以及下拉刷新
- RecyclerView的点击事件添加-------接口回调的形式添加
- Android中捕获TTextView文本中的链接点击事件方法
- android之View坐标系(view获取自身坐标的方法和点击事件中坐标的获取)
- android v7兼容包RecyclerView的使用(四)——点击事件的不同方式处理
- android之View坐标系(view获取自身坐标的方法和点击事件中坐标的获取)
- 使用注解提供view引用和点击事件
- android之View坐标系(view获取自身坐标的方法和点击事件中坐标的获取)
- Android 控件使用Animator动画后,点击事件失效解决方法
- android v7兼容包RecyclerView的使用(四)——点击事件的不同方式处理
- 【Android 应用开发】 自定义组件 宽高适配方法, 手势监听器操作组件, 回调接口维护策略, 绘制方法分析 -- 基于 WheelView 组件分析自定义组件
- android 中使用回调方法(适用于自定义view传值到activity、adapter传值到activity)