android EditText setText发生stackoerverflowerror
来源:互联网 发布:华为海军 知乎 编辑:程序博客网 时间:2024/05/30 23:26
前面一次项目中遇到了这个问题,后来解决了,这次项目中又遇到了这个问题,结果困扰了我一天,问了下同事,茅塞顿开。
所以写下来记住。
android有个监听输入的接口:TextWatcher,自己可以实现它,然后让EditText注册。
class Watcher implements TextWatcher{
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
if(isChanged){
return ;
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
mEditView.setText(ss);
}
}
假如按照上面所写的,一定会产生bug:StackOverflowError
原因是setText()本身就会回调监听器,监听器里面after函数有调用setText,结果就是一个没有出口的相互调用,结果是调用函数堆栈溢出。
解决办法有:不要在监听器里写触发监听器的函数,特别是没有出口的函数相互调用。
第二:可以写一个标志位:flag,假如EditText内容发生变化,才让他执行setText函数,如果没有发生变化,就不执行监听器里的setText函数
:class Watcher implements TextWatcher{
private boolean isChanged = false;
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
if(isChanged){
return ;
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
if(isChanged){
return ;
}
String str = s.toString();
SpannableString ss = ChatEmotion.string2Symbol(SmileActivity.this, str);
Log.d(TAG, ss.toString());
isChanged = true;
mEditView.setText(ss);
isChanged = false;
mEditView.invalidate();
}
}
这样就ok啦,哈哈,set之前将标志位置true,之后将标志位置false
- android EditText setText发生stackoerverflowerror
- Android中EditText.setText(String)方法导致输入法跳转
- EditText.setText()无效
- Android setText异常
- android textview settext 问题
- android.widget.TextView.setText()
- Android setText()异常
- android TextView.setText
- Android TextVeiw setText函数
- EditText 的setText()方法有问题
- EditText的setText()方法无效解决方法
- android-textview-settext()输出数字
- android settext刷新其他控件
- Android-Uiautomator:setText输入速度
- invalidate和状态栏的SetText函数发生死锁了!
- 调用TextView.setText后组件发生抖动问题及解决
- 转屏幕时,EditText的setText()方法无效
- EditText afterTextChanged 中 使用setText输入法异常问题
- Cisco Packet Tracer1…………初步
- Android获取不到ID
- Python 之string
- 占位
- 6410 UBOOT 支持SD/SDHC卡启动 FAT32文件系统 yaffs2烧录 图片显示烧录状态
- android EditText setText发生stackoerverflowerror
- 回调设计模式
- 个人安卓学习笔记---Android模拟打电话程序实现
- C++ Tuxedo FML类封装
- 又一采集器
- 堆栈,堆栈,堆和栈的区别
- 连载:编写高效代码(8) 空间换时间——我们总是在走,却忘了停留
- Linux终端下的网络服务命令
- Read & Write Excel files with Python