Android EditText addTextChangedListener仅用于用户输入
我有一个EditText,可以在其中侦听文本中的更改:Android EditText addTextChangedListener仅用于用户输入,android,android-edittext,textwatcher,android-togglebutton,Android,Android Edittext,Textwatcher,Android Togglebutton,我有一个EditText,可以在其中侦听文本中的更改: editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void onTextChanged(CharSeque
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) {
// do stuff
}
});
到目前为止,这一切都很好,如果我在EditText中键入一些内容,则会执行afterTextChanged()中的内容。现在,在同一个活动中,我有一个ToggleButton,可以更改EditText中的字符串。如何防止由于切换按钮触发“后文本更改”而导致文本更改
PS:不确定这是否相关,但我有一个EditText,它接受小数或小数(例如“0.75”或“3/4”),切换按钮应在小数和小数显示之间切换,但不应触发“后文本更改”中的任何内容,因为值保持不变(3/4=0.75)我认为有两种可能性:
public class MainActivity extends AppCompatActivity{
boolean automaticChanged = false;
ToggleButton toggleButton;
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//...
toggleButton.setOnClickListener(onClickListener);
editText.addTextChangedListener(textWatcher);
//...
}
TextWatcher textWatcher = 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) {
if (!automaticChanged) {
// do stuff
} else {
automaticChanged = false;
}
}
};
View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v)
{
automaticChanged = true;
// do stuff
}
};
}
}
简单的保持一个旗杆谢谢。工作起来很有魅力。由于“无法为最终变量赋值”和“变量是从内部类访问的,需要声明为最终变量”,我实际使用了
final boolean[]automaticChanged={false}
然后将值分配给automaticChanged[0]
@user1583209我更改了我的代码,以帮助您避免变量访问问题。这似乎是逻辑解决方案,但由于侦听器的随机执行顺序,可能会产生问题。有没有更好的实现可以避免这些问题?