`

点击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();
} 

分享到:
评论

相关推荐

    QT单击按钮关闭一个窗口,并且打开一个窗口

    通过以上步骤,我们就实现了QT应用中单击按钮关闭当前窗口并打开新窗口的功能。用户点击按钮,`openDialog`槽函数被调用,关闭`mainwindow`并显示`dialog`窗口。这种功能在许多应用中都很常见,比如登录界面、设置...

    点击按钮弹出窗口

    在IT行业中,"点击按钮弹出窗口"是一个常见的交互设计技术,主要应用于Web开发领域。这一功能使得用户可以通过点击特定的界面元素(如a标签)来打开一个新的小型网页窗口,通常用于显示详细信息、对话框或者进行特定...

    弹出dialog对话框按钮在外

    在IT行业中,尤其是在软件开发和用户界面设计领域,"弹出dialog对话框按钮在外"这一概念涉及到了人机交互和GUI(图形用户界面)设计的原则。Dialog对话框通常用于向用户展示临时信息、请求确认或者收集输入数据。当...

    qml 弹出自定义窗口(模态对话框)

    onClicked: dialog.close() // 点击按钮关闭对话框 } } ``` 2. **使用自定义组件**:在主QML文件中,我们可以通过`Loader`组件来动态加载并显示这个自定义对话框。当需要弹出对话框时,设置`Loader.source`属性为...

    dialog窗口大集合

    3. 显示和关闭Dialog:调用`show()`方法显示Dialog,调用`dismiss()`方法关闭Dialog。 Dialog窗口大集合中可能包含以下几种常见的Dialog类型: 1. **Alert Dialog**:最基本的对话框,包含一个标题、一条消息和一...

    自定义带两个按钮的Dialog

    在Android中,我们可以使用`AlertDialog.Builder`来创建一个基本的Dialog,并通过调用`setTitle()`, `setMessage()`, `setPositiveButton()`等方法设置Dialog的属性。然而,这些方法只能满足简单的配置,对于更复杂...

    jquery_dialog 弹出窗口

    在本实例中,我们关注的是`jquery_dialog`,这是一个jQuery插件,专门用于实现弹出窗口效果。这个插件使得在网页中创建各种形式的对话框变得简单而高效,比如警告消息、确认框或者自定义内容的弹窗。 首先,我们来...

    用Dialog实现的主动弹出式气泡

    5. **控制显示与消失**:为了实现主动弹出,我们需要在适当的时间调用`show()`方法来显示Dialog,并使用`dismiss()`方法在用户操作后关闭Dialog。可以监听Dialog上的按钮点击事件,或者在其他业务逻辑中控制Dialog的...

    jQuery Dialog 弹出层对话框插件(可加载url地址)

    例如,当用户点击“查看详情”按钮时,Dialog弹出并加载对应的商品详情页面。 总结,jQuery Dialog是一个强大且灵活的对话框插件,通过其丰富的选项和事件,可以满足多种网页交互需求。通过加载URL功能,可以将外部...

    自定义Dialog中播放视频

    在Android开发中,有时我们需要创建个性化的用户交互体验,例如在一个自定义的Dialog中播放视频。这个场景下,我们可以利用SurfaceView来实现视频播放,并且赋予它一些基本的控制功能,比如播放、暂停、显示进度条...

    dialog 封装DialogFragment来实现的, 通用dialog

    这样,父`Activity`或`Fragment`可以通过实现这个接口来处理`Dialog`的关闭、按钮点击等事件。 ```java public interface OnDialogClickListener { void onPositiveClick(DialogFragment dialog); void ...

    ListView点击item弹出Dialog

    5. 当Dialog中的按钮被点击,更新对应item的数据,可以通过直接修改Adapter数据源或通过回调接口传递给Activity/Fragment。 6. 更新数据后,调用`notifyDataSetChanged()`刷新ListView。 通过这种方式,我们可以...

    android 自定义右上角关闭按钮的dialog

    本文将深入探讨如何在Android中创建一个具有右上角关闭按钮的自定义Dialog,以此来提高用户体验并实现个性化设计。 首先,我们需要了解Android中的Dialog基础知识。Dialog是一种轻量级的窗口,它浮于应用程序的主...

    自定义dialog实现登录框

    在Android开发中,自定义Dialog是一种常见的用户界面(UI)设计技术,用于提供与用户交互的弹出式窗口。通常,我们使用Dialog来显示重要的信息、提示或进行简单的操作,如登录、注册等。本教程将详细介绍如何在...

    自定义Dialog对话框已修改完善版本(实现微信分享对话框)

    6. **显示和关闭Dialog**:在需要显示Dialog的地方调用show()方法,当用户完成操作或点击取消按钮时,调用dismiss()方法关闭Dialog。 在压缩包中的`CustomDialog`文件很可能包含了上述所有步骤的实现代码。通过查看...

    android 自定义右上角关闭按钮X的dialog(1).zip

    本文将详细讲解如何创建一个带有右上角关闭按钮“X”的自定义Dialog,并结合Java编程语言来实现这一功能。 首先,我们需要理解Android中的Dialog基本结构。Dialog是Android系统提供的一种轻量级窗口,通常用于显示...

    百度地图中自定义Dialog

    在Java代码中,我们需要创建一个继承自`android.app.Dialog`的类,用于实现Dialog的功能。在这个类中,我们可以设置Dialog的属性,如宽度、高度、背景色等,并加载之前创建的布局文件。下面是一个简单的示例: ``...

    android自定义Dialog的简单实现

    本篇文章将详细解析如何在Android中实现一个简单的自定义Dialog,以及相关的知识点。 首先,我们了解下Android原生Dialog的基本结构。Dialog是Android系统提供的一种模态窗口,它浮现在当前活动(Activity)之上,...

    android自定义签名dialog

    本教程将深入探讨如何在Android应用中实现一个自定义签名Dialog。 首先,我们需要理解Dialog的基本概念。在Android中,Dialog是Activity的一个子类,用于显示一些临时信息或者需要用户进行简单交互的操作。自定义...

    自定义圆角的dialog

    5. **处理点击事件**:根据业务需求,我们可能需要监听Dialog上的按钮点击事件。可以通过为布局中的按钮设置`OnClickListener`来实现。 ```java Button closeButton = findViewById(R.id.close_button); close...

Global site tag (gtag.js) - Google Analytics