我是靠谱客的博主 粗暴小蝴蝶,最近开发中收集的这篇文章主要介绍Android的EditText的addTextChangedListener监听出现死循环卡顿问题关于多个EditText的OnTextChange事件陷入死循环的处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在edittext里面用了setText()方法就会造成卡顿甚至接近死机

之前遇到过不过后来忘记了,这里再次记录一下

方法1,就是在用一个flag标记,感觉这个方法有点悬

方法2,

 @Override
public void afterTextChanged(Editable s) {
Edit.removeTextChangedListener(this);
Edit.setText("新取值");
Edit.addTextChangedListener(this);
}

可行,但是有个缺点,光标一直定位在最前面,后面想过把光标定位在最后,这样也可以但是觉得不理想

方法3,继承方法

关于多个EditText的OnTextChange事件陷入死循环的处理

 

import android.content.Context;
import android.text.TextWatcher;
import android.util.AttributeSet;
import java.util.ArrayList;
public class ExtendedEditText extends android.support.v7.widget.AppCompatEditText {
private ArrayList<TextWatcher> mListeners = null;
public ExtendedEditText(Context ctx)
{
super(ctx);
}
public ExtendedEditText(Context ctx, AttributeSet attrs)
{
super(ctx, attrs);
}
public ExtendedEditText(Context ctx, AttributeSet attrs, int defStyle)
{
super(ctx, attrs, defStyle);
}
@Override
public void addTextChangedListener(TextWatcher watcher)
{
if (mListeners == null)
{
mListeners = new ArrayList<TextWatcher>();
}
mListeners.add(watcher);
super.addTextChangedListener(watcher);
}
@Override
public void removeTextChangedListener(TextWatcher watcher)
{
if (mListeners != null)
{
int i = mListeners.indexOf(watcher);
if (i >= 0)
{
mListeners.remove(i);
}
}
super.removeTextChangedListener(watcher);
}
public void clearTextChangedListeners()
{
if(mListeners != null)
{
for(TextWatcher watcher : mListeners)
{
super.removeTextChangedListener(watcher);
}
mListeners.clear();
mListeners = null;
}
}
@Override
protected void onSelectionChanged(int selStart, int selEnd) {
super.onSelectionChanged(selStart, selEnd);
//光标首次获取焦点是在最后面,之后操作就是按照点击的位置移动光标
if (isEnabled() && hasFocus() && hasFocusable()) {
setSelection(selEnd);
} else {
setSelection(getText().length());
}
}
}

但是还是上面的同样问题,结果还真是找到了一个方法如下

//光标首次获取焦点是在最后面,之后操作就是按照点击的位置移动光标
if (isEnabled() && hasFocus() && hasFocusable()) {
setSelection(selEnd);
} else {
setSelection(getText().length());
}

还是贴上入口地址。

虽然都是借阅别人的也试过,还是ok的

最后

以上就是粗暴小蝴蝶为你收集整理的Android的EditText的addTextChangedListener监听出现死循环卡顿问题关于多个EditText的OnTextChange事件陷入死循环的处理的全部内容,希望文章能够帮你解决Android的EditText的addTextChangedListener监听出现死循环卡顿问题关于多个EditText的OnTextChange事件陷入死循环的处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部