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

原创 2016年08月30日 14:30:49

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


版权声明:未经授权请勿转载,可关注微信公众号『陈守印同学』回复转载,获取授权方式

RecyclerView通用adapter以及item点击事件的实现

今天实现内容如下: 1.实现recyclerview通用的adapter CommonAdapter 2.实现recyclerview item的点击事件 先上效果图 viewpager+f...
  • King_Marshal
  • King_Marshal
  • 2016年08月10日 22:49
  • 2208

C#将函数封装进dll,并在应用程序中调用

C#封装函数   作为一名小白可能看了很多人介绍方法都不得其意,大概是高手们不屑于写这种简单的博客。今日用到此封装方法,记录下来分享给大家。 一、封装函数   1、打开VS,新建C#库类,输入一下代码...
  • shaynerain
  • shaynerain
  • 2016年09月26日 15:14
  • 62949

Android中使用回调接口实现自定义view的点击事件

安卓中,最常见的回调接口就是view的点击监听事件方法,当然,回调接口不止再此使用,他还有更广泛的使用场景。 今天,我就通过一个简单的实现点击事件Demo,了解一下回调接口的简单应用。 首先自定义一个...
  • qierangtianxia
  • qierangtianxia
  • 2016年08月13日 18:51
  • 168

Android中Recyclerview使用7----条目中按钮点击事件,在activity中调用(接口回调)

  • 2016年07月22日 10:35
  • 38.56MB
  • 下载

自定义view点击事件的接口回调

  • 2017年05月01日 13:27
  • 19.72MB
  • 下载

接口的使用—自定义view点击事件的接口回调

我这里使用的是自定义组合view点击事件的接口回调,底层还是调用的android原生的OnClickListener事件。效果图: 三步实现自定义view点击事件的接口回调。 第一步:...
  • qq_27634797
  • qq_27634797
  • 2017年05月01日 13:42
  • 312

Android中Recyclerview使用7----条目中按钮点击事件,在activity中调用(接口回调)

0引入Recyclerview的支持库    compile 'com.android.support:recyclerview-v7:23.4.0' 1效果图: 2代码: 2.1MainActi...
  • zhaihaohao1
  • zhaihaohao1
  • 2016年07月22日 10:29
  • 3093

自定义view模板,实现点击事件的回调

主要的目的就是仿老版QQ的一个界面做一个模板。然后实现点击事件的回调。先看效果图:步骤如下: 1.在res/values/目录下新建一个atts.xml文件 内容如下: ...
  • zhujiangtaotaise
  • zhujiangtaotaise
  • 2015年12月22日 14:28
  • 446

Android 点击事件 的接口回调

//设置监听器 也就是实例化接口 public void setOnClickListener(final OnOKClickListener clickListener) { ...
  • czh01100044093
  • czh01100044093
  • 2015年05月13日 16:19
  • 1662

Android中Kotlin的学习(点击事件、跳转、for循环、RecyclerView、回调)

刚刚学习Kotlin,有什么不对的地方请见谅。 首先属性的声明中有两个很重要的关键字: var  和  val。 例如: var a = "hello" val b = "hello"区别是什么呢? ...
  • YuGuo_TianQing
  • YuGuo_TianQing
  • 2017年06月15日 11:00
  • 2168
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android中封装View提供接口供点击事件回调的方法及使用
举报原因:
原因补充:

(最多只允许输入30个字)