EditText中的TextWatcher监听

本文转自:http://www.aichengxu.com/java/40127.htm

关于EditText中的TextWatcher监听

2014-12-24 14:10  本站整理  浏览(2922)

关于EditText中的TextWatcher监听,有需要的朋友可以参考下。

功能:

1.监听EditText里输入内容的变化;

2.根据实时输入的文字内容,做出输入自动提示效果

接口方法:

TextWatcher myWatcher = newTextWatcher(){

@Override
public void onTextChanged(CharSequence s,int start,int before,int count){
     System.out.println("onTextChanged");
     System.out.println("s = "+s+",start = "+start+",before = "+before+",count = "+count);
}

@Override
public void beforeTextChanged(CharSequence s,int start,int count,int after){
     System.out.println("beforeTextChanged");
     System.out.println("s = "+s+",start = "+start+",count = "+count+",after = "+after);
}

@Override
public void afterTextChanged(Editable s){
     System.out.println("afterTextChanged");
     System.out.println("s = " + s);
}
};

触发过程:
1.beforeTextChanged(CharSequence s,int start,int count,int after);

在EditText里的内容即将发生变化之前触发,EditText里的内容变化有3种方式:

1.新增加字符;2.删除字符;3.替换输入框中的若干个字符。

该方法反映的是,EditText在要发生变化之前,原来的内容字符串s有哪几个字符将要发生何种变化。

无论何种变化方式,都可以理解为:输入框的原内容字符串s,从索引位置start开始,

有count个字符即将被替换,替换这count个字符的新的字符个数为after

注意:s是变化之前的输入框内容 


2.onTextChanged(CharSequence s,int start,int before,int count);

在EditText里的内容发生变化之时触发,

在变化时的新的字符串s里,从索引位置start开始,有count个字符,是替换了原来的before个字符的

注意:s是变化之后的输入框内容 


3.afterTextChanged(Editable s)

text变化之后触发,s是最终新的输入框内容

测试实例:

1.先输入字符串“汉口”

beforeTextChanged

s = ,start = 0,count = 0,after = 2

onTextChanged

s = 汉口,start = 0,before = 0,count = 2

afterTextChanged

s = 汉口

2.再输入字符串“天门”

beforeTextChanged

s = 汉口,start = 2,count = 0,after = 2

onTextChanged

s = 汉口天门,start = 2,before = 0,count = 2

afterTextChanged

s = 汉口天门

3.删除字符“门”

beforeTextChanged

s = 汉口天门,start = 3,count = 1,after = 0

onTextChanged

s = 汉口天,start = 3,before = 1,count = 0

afterTextChanged

s = 汉口天

4.删除“汉口”

beforeTextChanged

s = 汉口天,start = 0,count = 2,after = 0

onTextChanged

s = 天,start = 0,before = 2,count = 0

afterTextChanged

s = 天

5.用“浙江”替换“天”

beforeTextChanged

s = 天,start = 0,count = 1,after = 2

onTextChanged

s = 浙江,start = 0,before = 1,count = 2

afterTextChanged

s = 浙江

总结:

1.判断EditText里的内容是否被删除

如果beforeTextChanged里的after为0,则表示正在删除字符
2.在afterTextChanged()方法里执行后续的监听响应操作

3.实现类似网页输入框中的自动提示功能

每次afterTextChanged()执行之后,延迟300ms发送一个pending message去联网查询相关提示信息,

并且在每次发送查询pending message之前,先remove掉原来的pending message。

如果用户快速删除输入框里的内容,到最后输入框里为空,要记得remove掉之前的pending

message,

如果前面的某次pending message已经执行,则要记得清空查询出来的自动提示信息。

用户可能输入很快,延时发送查询消息,能尽可能减少联网查询的次数,提高查询效率。

4.联想到CursorAdapter和ListView绑定时,当数据库内容发生变化,ListView马上刷新,

如果数据库变化及其频繁,会导致频繁的刷新UI,可以考虑延时300ms左右发送一个消息,

将若干次数据的变化,只用一次刷新UI,提高性能。

猜你在找

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值