`

点击Dialog中的按钮不关闭窗口的实现方法

阅读更多

在Android实际开发中,我们可能常常需要弹出一个Dialog,让用户输入一些数据,而对用户的输入数据还需要进行一些比如不能为空的验证。但是在正常情况下,用户点击Dialog中的按钮后窗口会随即关闭,用户可能看不到你的错误提示,这样会显得很不友好。那有没有一种解决办法,可以让用户输入出错时单击按钮,继续留在页面而不是关闭本dialog呢?今天在工作中刚好碰到了这个问题,下面介绍一下我的解法办法。

首先看一个截图:

device

稍微解释一下需求,点击图中的“自定义”按钮弹出添加自定义零件的AlertDialog,该AlertDialog中的零件名称和单价是必填的,当用户没有填零件名称或单价时会给出提示而该AlertDialog不关闭。

看了一下Dialog的源代码,它有一个mShowing成员变量(private boolean mShowing = false;),当点击dialog上的按钮时会先判断mShowing的值,如果为true表示窗口正打开,就将其关闭,反之亦反。所以,我们可以通过手动设置mShowing的值来达到目的。

如上图,我会在点击“保存”按钮时进行用户输入验证,于是我在“保存”按钮的onClick事件中加入下面的代码就可以了:

if(ljmc==null || ljmc.equals("")){

	diaCustomName.setError("自定义零件名称不能为空!");
	//进行以下设置将不能关闭dialog
	try {
		Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
		field.setAccessible(true);
		field.set(dialog, false);
	} catch (Exception e) {
		e.printStackTrace();
	}
}

 

前面说了,mShowing是Dialog类的一个成员变量,在上面的方法中改变之后会影响别的按钮,如现在点击“取消”按钮将不能关闭对话框,解决办法在“取消”的onClick事件中再改变mShowing的值,如下:

try {
	Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
	field.setAccessible(true);
	field.set(dialog, true);
} catch (Exception e) {
	e.printStackTrace();
} 

分享到:
评论

相关推荐

    GTK +编程实现的程序

    实现主窗口的“delete_event”事件处理函数,该事件在用户点击窗口的关闭按钮时发生,要求窗口的关闭按钮被点击时,显示一个对话框,该对话框中含一条提示语句“您确定要退出程序吗?”,另含“是”和“否”两个按钮...

    MainWindow和Dialog通过信号和槽通信

    主界面点击按钮,弹出一个Dialog窗口,在这个窗口的lineEdit中输入内容,点击确认按钮,窗口关闭,同时将输入的内容传入在主界面的LineEdit控件中。

    Android中AlertDialog 点击按钮后不关闭对话框的功能

    当我点击确定按钮,也就是 AlertDialog 里的 PositiveButton 的时候,我们需要判断用户是输入是否符合我们的预期,如果不符合通常提示用户重写输入,且不关闭当前的对话框,但上图中点击按钮后会自动的关闭窗口。...

    LHGDialog V3.5.2 正式版 lhgDialog弹出窗口组件 lhgdialog V3.5.2

    xButton:是否显示窗口右上角的X关闭按钮参数值:默认true(显示,如果titleBar参数为false,此参数无效),false(不显示)。 btnBar:是否显示按钮栏参数值:默认true(显示),false(不显示)。 cancelBtn:是否...

    MFC多窗口例程

    接着点击右边的“Edit Code”按钮,在其中中加入(在CDialog::OnInitDialog()那句之后,在return TRUE那句之前): m_Spin1.SetRange(1,6); m_Text1=1; m_Spin1.SetPos(1); 其中CSpinButtonCtrl::SetRange()...

    pyside2无边框窗口可拖动拉伸边框缩放调节窗口大小

    # pyside2无边框窗口可拖动拉伸边框缩放调节窗口大小 1. 1. 去除系统自带边框,自定义美观...3. 最小化、最大化、关闭按钮; 4. 双击标题栏最大化/还原窗口; 5. 最大化状态下拖动窗口还原; 6. 拉伸边框调节窗口大小。

    Jquery_ui的dialog使用文档概述

    一个浮动的窗口,包含标题和内容两部分。可以移动,调整大小,以及关闭图标'×'。如果内容长度超过了对话框内容区域的显示,则会自动出现滚动...除此之外,还有一些常用的选项,如:添加底部按钮栏、模式窗口屏蔽层等。

    用jQuery实现的模态弹出窗口,封装了alert和confirm

    $.unfunkyUI // 关闭模态窗口 $.alert //警告提示对话框 $.confirm //确认和取消对话框 $.fn.block //块模态 $.fn.unblock//解除块模态 调用示例: $.blockUI({ url:"1.html",//弹出窗口显示的内容,使用...

    zDialog水晶蓝色的弹窗代码.rar

     CancelEvent:点击取消按钮或点击关闭按钮后执行的函数,默认为关闭本Dialog。  ShowButtonRow:是否不显示按钮栏,值为布尔型(true|false),默认值为false,当定义了OKEvent或调用了addButton时自动设为true。 ...

    Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

    种方法实现了信号和槽函数的关联,第一个按钮我们直接在设计器中实现其关 联;第二个按钮我们自己写了槽函数语句,其实图形的设计与直接写代码效果是 一样的。 这个程序里我们实现了两类窗口打开的方式,一个是自身...

    JS如何实现在弹出窗口中加载页面

    可在关闭窗口时,回调主页面按钮。要求jquery。 效果演示 首先,演示主窗口两个按钮作用。然后,演示关闭弹出窗口时,调用主窗口的两个按钮。 主要代码(时间仓促,没加注释,不过代码很简单,就是创建几个元素拼在...

    VC++常用的共用函数100多页

    15. 如何使窗口不可见? 41 16. 如何使窗口始终在最前方? 41 17、如何创建一个字回绕的CEditView 42 18、通用控件的显示窗口 42 19、移动窗口 42 20、重置窗口的大小 42 21、如何单击除了窗口标题栏以外的区域使窗口...

    基于Jquery的仿Windows Aero弹出窗(漂亮的关闭按钮)

    效果图:演示: 官方演示 本地演示 特点 独特: 窗口移动时标题栏反光效果 窗口按钮:最小化,减少,最大化和关闭 双击窗口标题栏最大化,缩小 活动窗口突出显示 更改窗口大小(resize) 鼠标拖拽窗口 N多个配置选项 ...

    弹层从窗口右侧缓慢弹出

    点击页面中的按钮,会从窗口的右侧自右向左以动画的方式出现一个弹层。 当点击弹层上关闭按钮的时候,弹层又会自右向左的移出窗口可视区域,以动画的效果消失。 示例代码中给出的弹层是满屏的,大家可根据自己的需要...

    VC++常用功能实例

    15. 如何使窗口不可见? 41 16. 如何使窗口始终在最前方? 41 17、如何创建一个字回绕的CEditView 42 18、通用控件的显示窗口 42 19、移动窗口 42 20、重置窗口的大小 42 21、如何单击除了窗口标题栏以外的区域使窗口...

    PT80-NEAT开发指南v1.1

    应用程序的关闭 .................................................................................................................................... 19 框架窗口 ...........................................

    jquery 弹出窗口,可缩放,可拖拽

    它的消息容器甚至能够根据宽度让文本居中或居左对齐——这一切全是XHTML+CSS原生实现。 完善的接口 它的接口完善,可以轻易与外部程序配合使用。如异步写入消息、控制位置、尺寸、显示与隐藏、关闭等。 细致的体验 ...

    open()代替showModelDialog()例子

    •当升级一个老项目时候发现在chrome中window.showModelDialog()不能用了,原来是在 chrome 37版本以后chrome正式废弃... 首先是判断子窗口关闭,因为项目是在子窗口关闭(确定按钮)的时候向父页面传递值的。

    react-win32dialog:无模式,可调整大小和可移动的对话框,具有经典的Windows外观。 带有支持窗口堆栈的轻量级窗口管理器

    React组件库具有经典Windows外观的无...请注意,此组件在很大程度上依赖于鼠标事件,因此在不使用鼠标指针的环境中,它可能无法按预期工作。安装npm install --save react-win32dialog用法import React from ' react '

    Qt模态对话框Demo

    在用户关闭模态对话框之前,主窗口和其他窗口将无法响应用户输入。 以下是如何创建和使用模态对话框的基本步骤: 1. **创建`QDialog`对象:** ```cpp QDialog *dialog = new QDialog(parent); ``` 这里,`...

Global site tag (gtag.js) - Google Analytics