java - 1 个 EditText 的 2 个 TextWatchers
问题描述
我正在为自己开发一个简单的 android 应用程序项目。我发现一篇文章让我决定使用 TextWatcher。很简单,我将 TextWatcher 添加到我的代码中。但事情就是这样。我设计了 2 个 RadioButtons 和 1 个 EditText。两个 RadioButton 都将确定我唯一的 EditText 的格式。
这是我希望复制应用程序的方式:
如果用户按下按钮 A,那么 Edittext 的输入格式将如下所示:
ABCD 1234 EFGH 5678
因此,它每 4 个字符有一个空格
如果用户按下按钮 B,那么 EditText 的输入格式将如下所示:
ABCD1234EFGH5678
所以,它在每 4 个字符中没有空格
即使用户再次按下对立面,EditText 的格式也会遵循条件
这是我尝试过的:
使用 if-else 条件,甚至创建 2 个 TextWatchers,但流程仍然是这样的:
制作 2 个 TextWatchers 来确定案例,但仍然是我所拥有的:
- 用户按下按钮 B,Edittext 格式将类似于
ABCD1234EFGH5678
- 然后,用户按下按钮 A,Edittext 格式将像
ABCD 1234 EFGH 5678
ABCD 1234 EFGH 5678
当用户再次按下按钮 B 时, Edittext格式将类似于ABCD1234EFGH5678
我应该怎么做才能达到这种方法?
这是我的 MainViewGenerator.java:
this.editTextNumberSpaceTextWatcher = new EditTextNumberSpaceTextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
super.onTextChanged(s, start, before, count);
editTextString = s.toString();
}
};
this.editTextNumberNormalTextWatcher = new EditTextNumberNormalTextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
super.onTextChanged(s, start, before, count);
editTextString = s.toString().replaceAll(" ", "");
}
};
withId(R.id.my_main_editText, new Anvil.Renderable() {
@Override
public void view() {
if (!btnRadioGroupValue.isEmpty()){
if (btnRadioGroupValue.equals(valueButtonA)){
onTextChanged(EditTextNumberSpaceTextWatcher);
text(editTextString);
} else if (btnRadioGroupValue.equals(valueButtonB)){
onTextChanged(EditTextNumberNormalTextWatcher);
text(editTextString);
}
}
}
});
这是我的 EditTextNumberSpaceTextWatcher.java:
public abstract class EditTextNumberSpaceTextWatcher extends PhoneTextWatcher {
private static final String MY_NUMBER_FORMAT = "**** **** **** **** **** **** **** ****";
public EditTextNumberSpaceTextWatcher() {
super(MY_NUMBER_FORMAT );
}
@Override
public char[] getSeparatorCharacters() {
return new char[]{' '};
}
}
这是我的 EditTextNumberNormalTextWatcher.java:
public abstract class EditTextNumberNormalTextWatcherextends PhoneticTextWatcher {
private static final String MY_NUMBER_FORMAT = "********************************";
public EditTextNumberNormalTextWatcher() {
super(MY_NUMBER_FORMAT );
}
}
解决方案
我认为您可以只使用一个 TextWatcher:
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//here evaluate the value of radio button
if(mRadioButton1.isChecked()){
//set pattern
}else if(mRadioBUtton2.isChecked()){
//set another pattern
}
}
推荐阅读
- php - 作曲家更新最后说 Trait 'Carbon\Traits\Mixin' not found
- docker - 在 Dockerfile 基础映像中公开端口是否会在最终映像中公开它们?
- python - [[]]*X 不创建唯一数组
- postgresql - \COPY TO Postgres 语句在 bash 中工作,但不适用于 python psycopg2
- python - Python - 根据其他变量自动创建新变量
- c - 将内存分配给结构中的数组
- javascript - 在资源时间轴中拖动事件时的 FullCalendar 工具提示错误
- apache-spark - 默认(未指定)触发器如何确定结构化流中微批次的大小?
- python - 在 python 中删除不重要的单词(收缩、连词、停用词)
- css - Boostrap :屏幕最左侧的 .container 中的背景图像