如何知道Android中的EditText发生了删除操作?
How to know a delete operation occurred in EditText in Android?
我想在 EditText 中删除一个字符时得到回调。
我该怎么做?
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
新的在你的 beforeTextChanged 回调中你有三个参数
- start是即将被删除的起始索引
- count 是即将被删除的文本的长度
- after 是即将添加的文本的长度
现在您只需比较这些参数即可通过回调 beforeTextChanged 实现您想要的任何结果
没有直接删除字符的回调!!
但是每次您添加任何文本或编辑 EditText 文本时,所有 TextWatcher 回调都会调用 分别
(1-beforeTextChanged , 2-onTextChanged, 3-afterTextChanged)
因此您可以检查所有的删除操作,如下所示。
请注意,您不需要检查所有回调中的删除操作。
在 3 TextWatcher CallBacks 中有 3 种方法可以理解 TextWatcher 中的删除操作,每种方法都可以解决您的问题:)
。我认为您最好了解一些 TextWatcher 回调参数。
正如@ikerfah所说
- start是即将删除的起始索引
- count是即将删除的文字长度
- after是即将添加的文字长度
方法:
- beforeTextChanged:你 compare after argument with count argument .
- onTextChanged:您在您的 activity 或片段中声明一个字段 并在每次 [=11= 】 叫。比较你的
字段是 previous EditText count with count 参数是
当前 EditTextCount;
- afterTextChanged: 它很像
onTextChanged
侦听器,但只是你使用 length 而不是计数。
Change Your Final addTextChangedListener link below:
yourEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {
if (after < count) {
// delete character action have done
// do what ever you want
Log.d("MainActivityTag", "Character deleted");
}
}
@Override
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
//mPreviousCount count is fied
if (mPreviousCount > count) {
// delete character action have done
// do what ever you want
Log.d("MainActivityTag", "Character deleted");
}
mPreviousCount=count;
}
@Override
public void afterTextChanged(Editable editable) {
Log.d("MainActivityTag",editable.toString());
int length=editable.length();
//mPreviousLength is a field
if (mPreviousLength>length)
{
// delete character action have done
// do what ever you want
Log.d("MainActivityTag", "Character deleted");
}
mPreviousLength=length;
}
});
我想在 EditText 中删除一个字符时得到回调。
我该怎么做?
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
新的在你的 beforeTextChanged 回调中你有三个参数
- start是即将被删除的起始索引
- count 是即将被删除的文本的长度
- after 是即将添加的文本的长度
现在您只需比较这些参数即可通过回调 beforeTextChanged 实现您想要的任何结果
没有直接删除字符的回调!!
但是每次您添加任何文本或编辑 EditText 文本时,所有 TextWatcher 回调都会调用 分别
(1-beforeTextChanged , 2-onTextChanged, 3-afterTextChanged)
因此您可以检查所有的删除操作,如下所示。 请注意,您不需要检查所有回调中的删除操作。 在 3 TextWatcher CallBacks 中有 3 种方法可以理解 TextWatcher 中的删除操作,每种方法都可以解决您的问题:)
。我认为您最好了解一些 TextWatcher 回调参数。
正如@ikerfah所说
- start是即将删除的起始索引
- count是即将删除的文字长度
- after是即将添加的文字长度
方法:
- beforeTextChanged:你 compare after argument with count argument .
- onTextChanged:您在您的 activity 或片段中声明一个字段 并在每次 [=11= 】 叫。比较你的 字段是 previous EditText count with count 参数是 当前 EditTextCount;
- afterTextChanged: 它很像
onTextChanged
侦听器,但只是你使用 length 而不是计数。
Change Your Final addTextChangedListener link below:
yourEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {
if (after < count) {
// delete character action have done
// do what ever you want
Log.d("MainActivityTag", "Character deleted");
}
}
@Override
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
//mPreviousCount count is fied
if (mPreviousCount > count) {
// delete character action have done
// do what ever you want
Log.d("MainActivityTag", "Character deleted");
}
mPreviousCount=count;
}
@Override
public void afterTextChanged(Editable editable) {
Log.d("MainActivityTag",editable.toString());
int length=editable.length();
//mPreviousLength is a field
if (mPreviousLength>length)
{
// delete character action have done
// do what ever you want
Log.d("MainActivityTag", "Character deleted");
}
mPreviousLength=length;
}
});