学习笔记——Dialog回调
刚才看到我的上一篇文章都是三个月前的了,这次也懒得找借口了(这是有多懒)。过了这么久,当然还是存了不少干货了,刚好最近想整理下这段时间的内容。上一篇文章是关于Dialog的,那么这篇文章就从它入手吧。接着往下写,很多时候,我们的Dialog所运用的场景和可能不是当前页面。
还是先上图:
就像这样的场景,一个发布页面,当用户将内容填写完毕后,发布,我们需要弹窗提示用户再仔细审查一遍,或者当时用户不想直接发布,添加到草稿等。
但是,发现没有,弹出这个Dialog,当用户点击确定的时候,我们怎样在这个确定的单击事件中,将他上面所填写的内容发送到服务器便成问了问题。
今天,我给大家带来了两个解决方案,大家根据自己的场景选择就好:
1、可以用集合,Map等存放数据的容器将上面这些数据保存,弹出Dialog的时候传递到Dialog里面,在Dialog里接收这个容器,再依次拿出数据,用网络框架发送到服务器即可。举个栗子:
Map<String, Object> params = new HashMap<String, Object>(); params.put("ISO_ID", workOrder.ISO_ID); params.put("IR_ID", workOrder.IR_ID); params.put("IR_CD", workOrder.IR_CD); params.put("IR_TITLE", workOrder.IR_TITLE); params.put("LATN_ID", sLoginInfoVo.USER.USER_PRIV.LATN_ID);。。。
然后在Dialog的构造方法中将params这个Map拿到。然后在确定的单击事件中发送到服务器就好:
private void commitData(Map<String, Object> params, String serviceCode) { AppRestClient.post(serviceCode, params, new AppResponseHandler<RequsetVo>(RequsetVo.class) { @Override public void onSuccess(RequsetVo result) { Intent intent = new Intent(AreaGuestActivity.this, CommonActivity.class); startActivity(intent); finish(); ToastUtil.showLong(AreaGuestActivity.this, "提交成功!!"); } @Override public void onFailure(int errorCode, String errorMsg) { ToastUtil.showLong(AreaGuestActivity.this, errorMsg); } }); }当然,这个不是今天的重点,今天的重点是第二个。
2、使用接口回调的方式:
我们可以在Dialog的方法里将确定发布的方法回调出去,代码如下:
public interface OnClickListener{ /** * 当点击某条的时候回调这方法 */ public void onItemClick(Context context,boolean cancelorsure); } //定义接口 private OnClickListener onClickListener; /** * 设置Item的点击监听 * @param listener */ public void setOnClickListener(OnClickListener listener){ this.onClickListener=listener; }在单击事件中:
mbtn_sure.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dismiss(); if(onClickListener!=null) { onClickListener.onItemClick(context,true); } } });在发布页面,当用户确定发布的单击事件里(一些逻辑处理后,至少得做个非空判断吧):
HintDialog myDialog = new HintDialog(PublishActivity.this); myDialog.show(); myDialog.setOnClickListener(new HintDialog.OnClickListener() { @Override public void onItemClick(Context context, boolean cancelorsure) { postOkHttpUtils_publish();//发布到服务器的方法 } });ok,解决了。不过这种方式,我当时使用的时候脑袋有点没转过来。