wil*_*ove 23 android android-edittext
我怎样才能避免代码行:
((EditText) findViewById(R.id.MyEditText)).setText("Hello");
Run Code Online (Sandbox Code Playgroud)
会在这里引发一个事件:
((EditText) findViewById(R.id.MyEditText)).addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
// HERE
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
Run Code Online (Sandbox Code Playgroud)
我想知道是否有任何方法可以禁止onTextChanged的执行,因为我注意到在选择AutoCompleteTextView的下拉结果的情况下(没有执行onTextChanged!).
我不是在寻找像"如果你好无所事事"这样的解决方法......
Daz*_*y_G 25
AutoCompleteTextView的Source 显示它们设置了一个布尔值,表示文本正被块完成替换
mBlockCompletion = true;
replaceText(convertSelectionToString(selectedItem));
mBlockCompletion = false;
Run Code Online (Sandbox Code Playgroud)
这是达到你想要做的任何事情的好方法.然后TextWatcher检查以查看setText是否已通过完成并返回该方法
void doBeforeTextChanged() {
if (mBlockCompletion) return;
Run Code Online (Sandbox Code Playgroud)
添加和删除TextWatcher对于应用程序来说将更耗时
Wil*_*zel 12
您可以检查哪个View当前具有焦点,以区分用户和程序触发的事件.
EditText myEditText = (EditText) findViewById(R.id.myEditText);
myEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(myEditText.hasFocus()) {
// is only executed if the EditText was directly changed by the user
}
}
//...
});
Run Code Online (Sandbox Code Playgroud)
或者,您可以简单地使用mEditText.hasFocus()区分人工更改或程序更改的文本,这对我来说很好用:
@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
if (mEditText.hasFocus()) {
// Do whatever
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
17392 次 |
| 最近记录: |