首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有没有办法阻止AlertDialog关闭无效输入?

在Android开发中,可以通过以下方法阻止AlertDialog关闭无效输入:

  1. 输入验证:在AlertDialog中的输入框中添加输入验证逻辑,例如检查输入是否为空、是否符合特定格式等。可以通过设置输入框的监听器(如TextWatcher)来实时监测输入内容,并在输入不符合要求时禁用对话框的确认按钮。
  2. 自定义AlertDialog:可以通过继承AlertDialog类并重写其dismiss()方法来控制对话框的关闭行为。在重写的dismiss()方法中,可以添加对输入内容的验证逻辑,如果输入无效,则阻止对话框关闭。
  3. 对话框生命周期回调:可以通过重写AlertDialog的onCreate()方法或者使用DialogFragment,并重写其onCreateDialog()方法,在这些方法中添加输入验证逻辑。如果输入无效,则可以在对话框关闭之前显示错误提示,并阻止对话框关闭。

以下是一个示例代码,演示如何通过输入验证来阻止AlertDialog关闭无效输入:

代码语言:java
复制
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("输入对话框");
final EditText input = new EditText(context);
builder.setView(input);

builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // 点击确定按钮时的逻辑处理
        String userInput = input.getText().toString();
        if (isValidInput(userInput)) {
            // 输入有效,执行相应操作
        } else {
            // 输入无效,显示错误提示
            input.setError("输入无效");
            // 阻止对话框关闭
            dialog.setCancelable(false);
            // 重新显示对话框
            dialog.show();
        }
    }
});

builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // 点击取消按钮时的逻辑处理
        dialog.dismiss();
    }
});

AlertDialog dialog = builder.create();
dialog.show();

// 输入验证方法示例
private boolean isValidInput(String input) {
    // 进行输入验证的逻辑判断
    return !TextUtils.isEmpty(input);
}

请注意,以上示例代码仅为演示目的,实际使用时需要根据具体需求进行适当修改和扩展。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android提醒微技巧,你真的了解Dialog、Toast和Snackbar吗?

Dialog 首先来介绍一下Dialog的用法吧,其实很简单,相信大多数人都是经常使用的: AlertDialog.Builder builder = new AlertDialog.Builder(this...这个效果就比较丑了,不过没办法,这就是2.3系统当时的风格呀。 人的审美总是在进步的,我们有没有什么办法在老版本的系统中也使用Material Design风格的Dialog呢?...AlertDialog,就能让对话框在所有的系统版本中都保持一致的风格了。...而Dialog的特征就是,它会阻止你原本正在进行的操作,必须停止下来对Dialog进行处理。...这样的体验其实是不好的,因为也许用户是手抖了一下多点了几次,导致Toast就长时间关闭不掉了。又或者我们其实已在进行其他操作了,应该弹出新的Toast提示,而上一个Toast却还没显示结束。

1.3K80
  • Android中在activity给别的页面的控件添加控件点击事件

    最简单的办法就是在xml的控件里写android:onClick="method",然后在activity里面写对应的方法。...于是在网上查到了另外一种办法: View view = getLayoutInflater().inflate(R.layout.test_layout, null); test_layout为想要添加点击事件的控件的页面...,这样可以找到那个控件虽然不会报空指针异常,但是新建了一个View和当前activity使用的View不是同一个View,所以就算设置了点击事件也无效。...发现这个问题是在写AlertDialog的时候自定义了AlertDialog的View,然后里面有Button需要设置点击事件 AlertDialog.Builder adBuilder = new AlertDialog.Builder...显示View和Button的点击事件View不是同一个View,所以就会点击无效

    1.8K20

    AlertDialog点击确定不消失

    通常情况下我们创建的AlerDialog代码如下 AlertDialog alertDialog = new AlertDialog.Builder(this)...但如果我们在弹窗里添加一个EditText输入框,判断如果输入框为空的时候弹提示而告诉用户输入框为空,请输入内容。 这种情况就需要保留AlertDialog让它不消失。...解决办法如下: 首先我们将PositiveButton的监听设置为null .setPositiveButton("确定", null) 然后我们拿到PositiveButton,并由我们自己来实现监听即可是实现...AlertDialog按钮不消失的需求 当我们在自己定义的监听里需要让AlertDialog消失时,调用alertdialog.cancle()即可 整体代码如下 //创建输入框...EditText et = new EditText(this); AlertDialog alertDialog = new AlertDialog.Builder(this).setTitle

    2.9K30

    8.广播

    动态注册:需要使用广播接收者时,执行注册的代码,不需要时,执行解除注册的代码 安卓中有一些广播接收者,必须使用代码注册,清单文件注册是无效的 屏幕锁屏和解锁 电量改变 public class MainActivity...com.example.broadcasttest.MY_BROADCAST"/> 最终接收者:所有广播接收者都接收到广播之后,它才接收,并且一定会接收 abortBroadCast:阻止其他接收者接收这条广播...1.强制下线功能需要先关闭掉所有的活动,然后回到登录界面。...alertDialog = dialogBuilder.create(); // 需要设置AlertDialog的类型,保证在广播接收器中可以正常弹出 alertDialog.getWindow...,首先是使用AlertDialog.Builder来构建一个对话框,注意这里一定要调用setCancelable()方法将对话框设为不可取消, 否则用户按一下Back键就可以关闭对话框继续使用程序了。

    1.6K100

    中国商标网用户登录error XMLHttpRequest报错解决方案

    最近子凡准备自己通过商标局官网来注册提交一下商标申请,毕竟人穷想要省点钱,所以就想着省去代理商中间商赚差价,但是其中就遇到一个问题,当申请通过后,也安装好本地证书驱动,输入 PIN 登录的时候网页上面就会提示...http://127.0.0.1:18080/’ 子凡虽然是程序员,之前在开发一些页面的时候也有遇到过这类的错误提示,但是可以通过修改 JS 代码解决,但是这是商标局的官网我咋个能去修改,所以只能想想其它办法...,最快的方法就是搜索寻找,看看有没有其他大神已经解决了这个问题,没想到还真的有相关的解决办法。...Google Chrome 浏览器/采用谷歌浏览器内核的浏览器都适用 1.打开浏览器,在地址栏输入:chrome://flags,回车访问; 2.在页面顶部搜索栏(Search flags)输入“Block...简而言之就是关闭了 Block insecure private network requests,中文意思就是中文为阻止不安全的专用网络请求,对于我们大多数使用者来说并没有任何影响,其实有很多的老旧网站或者国家网站就很容易出现这类的报错

    2K20

    Android开发笔记(一)

    整体说来将功能函数化可以方便修改和阅读,因此在那之后许多代码我都进行了修改,比如对于获取TextView的输入这个例子: username.addTextChangedListener(new TextWatcher...bdr = new AlertDialog.Builder(this); bdr.setMessage(R.string.app_name); bdr.setIcon...代码中使用了AlertDialog,setMessage为要显示的字符串,通常在string.xml文件中进行了定义(便于国际化),setIcon则是用来放图标,NegativeButton和PositiveButton...终止一个Activity 如果我们的程序中有返回上一层这种按钮,我们要真正实现返回上一层,而不是新打开一个Activity,则应在点击事件中使用finish();来关闭当前Activity,如以下代码所示...(View v) { finish(); } }); 去掉默认的绿色标题栏 默认生成的应用都有标题栏,十分不美观,因此个人倾向想办法去掉

    31730

    Android开发笔记(六十六)自定义对话框

    AlertDialog没有公开的构造函数,必须借助于AlertDialog.Builder才能完成参数设置。Builder的常用方法如下: setIcon : 设置标题的图标。...窗口显示与对话框模式的Spinner极为相似,没有底部的按钮,一旦选中某项就立即关闭对话框。 setSingleChoiceItems : 设置单选列表的内容视图。...dismiss : 关闭对话框。 setCancelable : 设置对话框是否可取消。 setCanceledOnTouchOutside : 点击对话框外部区域,是否自动关闭对话框。...默认会自动关闭 getWindow : 获取对话框的界面对象。 其中getWindow方法是自定义对话框的关键,首先获取到对话框所在的界面对象,才能往这个界面上添加定制视图。...这个似乎也在哪里见过,看看这里有没有《Android开发笔记(二十)顶部导航栏ActionBar》,原来Activity的requestWindowFeature方法也用了Window:getWindow

    2.5K20

    Echarts鼠标事件阻止冒泡

    不知道大家在使用echarts的鼠标事件时,有没有类似弹窗那种需求(点击弹窗外的遮罩区域,弹窗消失):此处即点击图表的图形有自己的点击事件,点击图形外空白,可以做其他处理(比如恢复所有分类的总计等等)...// param.event.event.stopPropagation(); // 无效 // return false; // 无效 }) /...相当于是要阻止饼图点击事件的冒泡。...关联文章: Echarts柱状图点击事件(阻止冒泡) 采用myChart.off('click')。网路上输入echarts 阻止冒泡,出来很多这个解决方案的文章。...echarts鼠标事件阻止冒泡 采用param.event.event.stopPropagation()。这也是我一开始要采用的阻止冒泡方法,最初也是不知道怎么获取window.event。

    4.7K30

    堡垒机xdmcp连接服务器连不上的原因是什么?如何检测?

    堡垒机xdmcp无法连接服务器的原因 堡垒机xdmcp无法连接上服务器,可能是因为系统防火墙阻止了端口开启,就会出现连接不上服务器的情况,毕竟堡垒机xdmcp需要建立在系统启动端口的基础上才能进行,一旦防火墙阻止了端口的开启...如果开启了管理权限,还没办法解决问题,就需要用排除法来检测连接不上的原因了。 堡垒机xdmcp连接服务器连不上的检测方法 1、查看防火墙设置。...当出现堡垒机连接不上服务器的问题之后,先要看一下防火墙的设置有没有被改动过,看是否设置了阻止,只需把阻止改为同意并重新运行远程桌面就可以连上服务器了。 2、查看堡垒机的远程设置。...看一下堡垒机的远程设置有没有被勾选,若是勾选的是被动,只需要选择正确的勾选项就可以了。 3、查看服务端口。...使用指令来查看服务端口是否启动,若是端口没有显示出来,就说明端口被关闭了,就需要找到服务管理重新开启服务端口。

    2.1K20

    手机卫士黑名单功能(ListView结合SQLite增删改)

    修改界面,在顶部横条上增加一个添加按钮,点击打开一个自定义对话框,输入电话号码和拦截模式保存到数据库 自定义对话框看这篇http://www.cnblogs.com/taoshihan/p/5370378...添加记录 调用Builder对象的show()方法,获取AlertDialog对象 调用View.inflate()方法,将布局文件转成View对象 调用View对象的findViewById()方法,...对象的dismiss()方法,可以关闭对话框 调用View对象的findViewById()方法,获取到各个控件的值,进行判断处理 调用之前定义好的Dao类BlackNumberAdo对象的add()方法..., null); builder.setView(view); final AlertDialog alertDialog=builder.show();...if(TextUtils.isEmpty(phone)){ Toast.makeText(CallSmsSafeActivity.this, "请输入手机号码

    88730

    Kotlin入门(20)几种常见的对话框

    由于这里的Java代码逻辑实在拐弯抹角,又是数组适配器又是选择监听器的,因此Kotlin对这种玩意确实没有好办法。...既然此路不通,那就试试别的办法呗,前面提到Spinner其实由两部分组成,一部分是直接显示在界面上的带箭头文本,另一部分是点击后弹出的选择对话框,所以能不能绕过Spinner,运用所见即所得的理念,干脆把下拉框分离成两个控件好了...下面给出AlertDialog对应selector函数的Java实现代码,方便读者理解它的本质: AlertDialog.Builder builder = new AlertDialog.Builder...这时就用到了进度对话框,在加载开始前弹出进度框,加载结束后关闭进度框,从而改善了加载交互的用户体验。 进度对话框分两种,一种是水平进度对话框,另一种是圆圈进度对话框,下面分别进行介绍。...若想更新水平条的进度值,则可调用以下代码设置当前进度: dialog.progress = 进度值(取值为0到100) 当进度值达到100,意味着处理完成,此时即可调用对话框对象的dismiss函数关闭对话框

    1.6K10

    Kotlin入门(20)几种常见的对话框

    由于这里的Java代码逻辑实在拐弯抹角,又是数组适配器又是选择监听器的,因此Kotlin对这种玩意确实没有好办法。...既然此路不通,那就试试别的办法呗,前面提到Spinner其实由两部分组成,一部分是直接显示在界面上的带箭头文本,另一部分是点击后弹出的选择对话框,所以能不能绕过Spinner,运用所见即所得的理念,干脆把下拉框分离成两个控件好了...下面给出AlertDialog对应selector函数的Java实现代码,方便读者理解它的本质:     AlertDialog.Builder builder = new AlertDialog.Builder...这时就用到了进度对话框,在加载开始前弹出进度框,加载结束后关闭进度框,从而改善了加载交互的用户体验。 进度对话框分两种,一种是水平进度对话框,另一种是圆圈进度对话框,下面分别进行介绍。...若想更新水平条的进度值,则可调用以下代码设置当前进度:     dialog.progress = 进度值(取值为0到100) 当进度值达到100,意味着处理完成,此时即可调用对话框对象的dismiss函数关闭对话框

    2.8K30
    领券