关闭

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

标签: Dialog
812人阅读 评论(0) 收藏 举报
分类:

这里我们封装一个自定义的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方法。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:15133次
    • 积分:968
    • 等级:
    • 排名:千里之外
    • 原创:83篇
    • 转载:5篇
    • 译文:3篇
    • 评论:4条
    知识圈子
    最新评论