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

在onTextChanged侦听器内调用Editable.clearSpans()时Edittext冻结

在onTextChanged侦听器内调用Editable.clearSpans()时,EditText会出现冻结的情况。这是因为Editable.clearSpans()方法会清除Editable对象中的所有Span对象,包括自定义的Span对象。而在onTextChanged方法中调用该方法会导致循环调用,从而导致EditText冻结。

为了解决这个问题,可以采取以下几种方法:

  1. 将Editable.clearSpans()方法移出onTextChanged侦听器内部调用。可以在其他地方调用该方法,比如在其他事件触发时或者在特定的条件下调用。
  2. 使用一个标志位来控制Editable.clearSpans()方法的调用。在onTextChanged方法中,可以设置一个标志位,当需要调用Editable.clearSpans()方法时,将标志位设置为true,并在之后的某个时机检查该标志位并调用Editable.clearSpans()方法。
  3. 使用Handler延迟调用Editable.clearSpans()方法。可以通过Handler.post()方法将Editable.clearSpans()方法的调用延迟到消息队列中,从而避免在onTextChanged方法中直接调用。

需要注意的是,以上方法只是解决了在onTextChanged侦听器内调用Editable.clearSpans()方法导致EditText冻结的问题,并没有涉及到其他方面的功能和优化。在实际开发中,还需要考虑其他因素,如性能优化、用户体验等。

关于EditText的更多信息和使用方法,可以参考腾讯云的文档:EditText使用指南

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

相关·内容

详解EditText输入监听TextWatcher「建议收藏」

()>>>afterTextChanged() 请勿afterTextChanged();加入代码进行验证,这个会进入死循环的,后边讲原因。...意思是:这个方法告诉你,字符串s的某处,一些地方已经改变了,在这个方法里可以对s做一些改变,但是注意别让你陷入反复调用它的问题上,因为可能你做的任何改变会让他递归调用本身。...(这个方法没有告诉你哪里改变了,或许其他afterTextChanged()可能已经改变它了并使这个改变失效,但是如果你确定知道他是否起作用了,你可以onTextChanged()里调用setSpan...所以这个方法是在你输入完后才调用的,你输入一个字符,然后以后是不是一直处于输入完成状态,所以他一直调用这个方法。...onTextChanged();View改变之后短时间内执行,也就是区别afterTextChanged();的一直执行状态,他只调用一次。

2.9K31
  • 程序正在监听你的一举一动?

    相信大家项目中多多少少都用过EditText这个控件吧,但是大家是否熟悉它的监听呢?最近阿Q使用它的监听的过程中就碰到了几个问题,在这里整理一下,供小伙伴们参考。...void afterTextChanged(Editable editable) { } }); 先说一下监听中的三个抽象函数,beforeTextChanged()为输入文字之后,还未显示EditText...上的操作;onTextChanged()为输入了文字,正在进行EditText显示的操作;afterTextChanged()为文字显示EditText上的操作。...大家应该注意的是如果在afterTextChanged()函数中去调用setText()方法,就会去重复调用其前两个方法,造成死循环,直到程序崩溃为止。...使用过程中,如果复用EditText的话,会出现输入数字错乱的问题,这时候我们需要加上监听的唯一标志,用于区分不同的监听,并且监听用完之后要记得移除监听。

    40130

    Android自定义EditText:手把手教你做一款智能EditText(一键删除、自定义样式)

    特点 对比市面上EditText控件,该控件Super_EditText 的特点是: 3.1 功能实用 一键删除功能 需求中非常常见,现将其封装后更加方便使用 可自定义样式程度高(比自带的强大 & 方便...本身的方法来确定是否显示删除图标 * 监听方法:onTextChanged() & onFocusChanged() * 调用时刻:当输入框内容变化时 & 焦点发生变化时...(Drawable left, Drawable top, Drawable right, Drawable bottom) // 作用:EditText上、下、左、右设置图标...(Drawable left, Drawable top, Drawable right, Drawable bottom) // 作用:EditText上、下、左、右设置图标...本身的方法来设置所有样式 * 监听方法:onTextChanged() & onFocusChanged() * 调用时刻:当输入框内容变化时 & 焦点发生变化时 */

    1.2K30

    Android自定义EditText:手把手教你做一款含一键删除&自定义样式的SuperEditText

    特点 对比市面上EditText控件,该控件Super_EditText 的特点是: 3.1 功能实用 一键删除功能 需求中非常常见,现将其封装后更加方便使用 可自定义样式程度高(比自带的强大 & 方便...本身的方法来确定是否显示删除图标 * 监听方法:onTextChanged() & onFocusChanged() * 调用时刻:当输入框内容变化时 & 焦点发生变化时...(Drawable left, Drawable top, Drawable right, Drawable bottom) // 作用:EditText上、下、左、右设置图标...(Drawable left, Drawable top, Drawable right, Drawable bottom) // 作用:EditText上、下、左、右设置图标...本身的方法来设置所有样式 * 监听方法:onTextChanged() & onFocusChanged() * 调用时刻:当输入框内容变化时 & 焦点发生变化时 */

    1.8K30

    RecyclerView中监听EditText变化的BUG的解决方法

    需求:有一个列表,列表中有一个edittext(只能输整形),外部有一个整形变量Int,每次改变列表中其中一项的edittext的值,外部的Int都会改变。...既然这样,我们就需要对edittext进行addTextChangedListener监听,一般做法是afterTextChanged中对外部进行循环累加,但是想想,每一次你改变edittext都要进行一次时间复杂度为...进行setText操作后都会调用这个方法,不巧的是recyclerview是复用容器,数据超出可用的容器,会对edittext进行复用,也就是说,我们本身只想在addTextChangedListener...中去监听手动改变edittext的情况,而recyclerview重复调用setText也会导致默认调用addTextChangedListener而会产生严重的数据错乱。...所以你滑动发现befour 和now 会是一样,这时就不用进行更改总数的操作,而手动改变editTextbefour 和now 是不一样的。

    1.6K20

    RxBinding详解: 规范而强大的安卓UI响应式编程

    使用RxBinding,你对这些监听事件的可以有一致的实现:RxJava的subscription。只需要对RxJava稍有了解即可。...必须注意到前面的例子中使用RxBinding只是简单实现了TextWatcher的onTextChanged方法。下面我们来看看如何用RxBinding完全实现TextWatcher。... context 中使用 share 允许对同一个button点击事件的多次监听,简直太强大了。 RxBinding 癖好与安装 使用RxBinding需要注意一些地方。...当RxView.scrollChangeEvents() observable被subscribed,该ViewScrollChangeEvent将作为onNext方法的参数。....* 包的视图与控件对应的RxBindingcom.jakewharton.rxbinding.widget.*包。 RxBinding对不同平台的类没有局限。

    2.9K40

    关于RecyclerView中嵌套EditText引发的问题总结

    1.数据错乱 最近在开发一个基于RecycelrView的编辑器, Recyclerview中包含Edittext滚动时会发生数据混乱的问题,之所以数据混乱就是因为Recyclerview的复用导致的...处理方式为: onBindViewHolder中通过适当的时机添加或移除Edittext的TextChangedListener来处理数据错乱的问题。...这个适当的时机就是选Edittext获得焦点的时候添加监听器,失去焦点的时候再移除监听器,这样可以保证数据的正确性。..., start: Int, count: Int, after: Int) { } override fun onTextChanged(s: CharSequence...关于RecyclerView嵌套EditText,唤起键盘被遮挡 修改前: 修改后: window.decorView.viewTreeObserver.addOnGlobalLayoutListener

    2K00

    android textwatcher 获取当前控件,android api解析之TextWatcher

    开发android有几年了,但是从来没有整理过,一直是写写写.从今天起开始慢慢整理,总结之处如有错误请指出,谢谢 TextWatcher什么时候会被调用?...TextWatcheredittext内容发生变化时会被调用 TextWatcher一共有三个方法 beforeTextChanged(CharSequence s, int start, int count..., int after) 文本变化前调用,start代表开始变化的位置,count代表变化的字符长度.after代表变化后字符该位置字符数量 onTextChanged(CharSequence s,...int start, int before, int count) 文本变化时调用,此时s的内容已发生改变,start代表开始变化的位置,before代表变化前该位置字符数量,count代表变化了的字符长度...afterTextChanged(Editable s) 文本变化后调用,s即为变化后的文本结果 例子: 空白输入框中输入一个字符 Paste_Image.png 第一条的意思是初始长度为0,变化的位置为

    51520

    Android View教程之自定义验证码输入框效果

    如果我们拿到这样的UI,想到的布局应该是用4个EditText包在横向的LinearLayout里面,但今天要讲的View,所以我们决定用一个自定义的EditText 画出来。 学到什么?...基本理解画布概念 画布的状态、平移 布局测量 画图片 功能需求 高亮当前输入框 输入满4个数字自动调用方法 思路 完全重画一个EditText,就包含了测量布局和重新绘制这两个关键步骤。...好了,到这里理一下整体的思路: 根据验证码个数以及边框大小来计算输入框显示的宽度 覆盖原来的EditText画布,重新绘制方框 根据输入的索引来确定高亮的方框 重写onTextChanged 但满足验证码个数的时候调用自动完成方法...来一步步看代码注释: @Override protected void onDraw(Canvas canvas) { // 画支持设置文本颜色,把系统化的文本透明掉,相当于覆盖 mTextColor...1、调用canvas.save();保存当前画布的状态,用PS来解析就是按下ctrl +s键,然后帮你新建一个新的图层。

    1.3K30

    EditText 集锦 - 开发中常用的用法及遇到的各种坑

    前言 EditText ,文本输入框,一个再熟悉不过的的控件,开发当中,我们需要经常用到。这边文章,主要是记录 EditText 的常用用法,需要的时候可以直接复制张贴,提高效率。...如设置成1.5倍. ---- 输入法相关 设置默认输入法 有时候为了提高用户体验,弹出输入法需要设置默认的输入状态,比如单词应用弹出输入法,输入法最好是英文输入状态下。...如果是字典应用,弹出输入法最好是中文输入状态下,Android 并没有提供设置默认的输入状态的接口,但我们可以通过如下方法一样能够达到想要的效果: 默认中文: mEditText.setInputType...; } }); 限制输入多少字符 开发当中,我们通常需要对 text 的输入字符进行限制输入,比如限制输入 30 个字符,虽然我们可以直接调用 setMaxLength 方法来限制输入,但是这样会有一个问题...,就是当你的 text 超过 30 个字符的时候,你调用 mEtText.setText ,这时候会报错。

    2.2K20

    Android开源库:手把手教你实现一个简单好用的搜索框(含历史搜索记录)

    context) { super(context); init(); // 初始化该组件,对EditText_Clear进行初始化 ->>步骤2...setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom)介绍 // 作用:EditText...X轴上的起点 y:组件容器Y轴上的起点 width:组件的长度 height:组件的高度 } /** * 步骤3:通过监听复写EditText本身的方法来确定是否显示删除图标...* 监听方法:onTextChanged() & onFocusChanged() * 调用时刻:当输入框内容变化时 & 焦点发生变化时 */ @Override...源码分析 /** * 监听输入键盘更换后的搜索按键 * 调用时刻:点击键盘上的搜索键 */ et_search.setOnKeyListener(new View.OnKeyListener

    2.8K10

    Android中EditText setText方法的踩坑实战

    1、平平常常中就这样开始 某一天,我准备做一个搜索功能,这个搜索功能呢大概是主活动A中,用EditText接收输入,当EditText监听到输入框中内容有变化,跳转到活动B中,活动B中准备有搜索历史记录等等...中有输入时,跳到B,B中确定好关键词后,点击搜索(你的搜索在哪里,让你们看下图吧) ?...3、发现敌踪迹 当时我实在onResume()调用searchEditText.setText(keyword)这几句的,所以问题显得比我上面写的要隐蔽些。...关键点我已经标出来了,7和11间,有了监听方法的执行,说明:EditText的setText方法会触发 文本变化的监听,这就是此次踩坑的根源。...4、 捕获凶手:setText()方法会触发EditText文本变化的监听 5、解决方案:将setText设置设置监听之前,或者用setHint也可以。

    2K30

    Android开发笔记(四十四)动态UI事件

    翻页过程中,状态值变化依次为:正在滑动->滑动完毕->静止。 onPageScrolled : 翻页过程中调用。...onTextChanged : 文本变化中调用。 afterTextChanged : 文本变化后调用,该方法用得较多。...setDropDownHeight : 设置下拉列表的高度 setDropDownWidth : 设置下拉列表的宽度 setSingleLine : 设置列表中的每个元素是否单行显示 示例代码主要实现了三个功能: 1、文本框一开始获得焦点...比如弹出商品关键词列表,往往还希望每行后面显示该关键词对应的商品数量,从而让用户更有目的地选择合适的商品。...基于此,博主在下面又给出了基于EditText+ListView的实现方式,该方式除了列表中显示关键词与数量外,还增加了一个叉号按钮用来立即清空文本框。

    1.1K10

    Android写一个实时输入框功能

    我们在做安卓项目通常都会对Android的 EditText输入框的内容实时监听,这里我们就做一个实时监听框,EditText实时输入,而TextView实现实时显示。话不多说,直接上效果图: ?...beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged...我的想法是通过开辟一个子线程来实现监听,然后将这个EditTex找到id之后就开始运行,发现只要文本框一输入就开始报错或者已进入程序就来个白屏。最后再度娘的帮助下成功脱困。...下面看下android 输入框实时监听 editText.addTextChangedListener(new TextWatcher() { @Override...public void onTextChanged(CharSequence s, int start, int before, int count) { Log.e(TAG, "输入文字中的状态

    1.2K10

    Android EditText每4位自动添加空格效果

    拓展功能 下面就来基本功能上做拓展:每4位,自动添加空格。...看似很小的功能,开发的过程中,遇到了非常多的问题与难点: EditText输入框监听死循环 输入框中的空格无法删除(删除又添加) 从中间删除一个数字产生的一系列问题 输入框光标位置的控制问题 之前踩坑的过程就不再赘述了...经过一系列的实验,最后定下来的思路如下: 当输入框的内容改变,就将内容取出拆分为一个一个的字符,每4位的中间添加空格,最后一个4位不能添加。...当用户删除中间的字符,要记录该动作并且记录光标位置,保证重新排序完成后,光标的位置应该在的位置。...现在我们就要进行第二步,当用户删除中间字符,我们要判断用户本次操作是删除字符,并且保存本次删除的光标位置,删除完成、排序完成之后,将光标移动到保存的光标位置。

    1.7K30
    领券