片段中的编辑文本在 aftertextchanged 中未更改生成器
Builder not changed in aftertextchanged for edittext in fragment
更改后如何更改编辑文本?方法有效,但 edittext 没有改变。我可以在 aftertextchanged 中使用 setview 吗?片段中的警报对话框所以很难,我用这个应用程序崩溃了
AlertDialog.Builder builder = new AlertDialog.Builder(this.getContext());
builder.setTitle("Lütfen tutar girin");
final EditText input = new EditText(this.getContext());
input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
builder.setView(input);
input.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) {
try {
if(s.length()>=4) {
s = new SpannableStringBuilder(Formatter(s.toString()));
}
}catch (NumberFormatException e){
}
}
});
builder.setPositiveButton("OK", (dialog, which) -> {
String pin = input.getText().toString();
if (!pin.isEmpty()) {
getFragmentManager().beginTransaction()
.replace(R.id.container, new CardFragment((int) (Float.parseFloat(pin) * 100), operation))
.addToBackStack(null).commit();
} else {
showMessage("Lütfen Tutar Giriniz");
}
});
builder.show();
它正在更改文本字段。格式化程序:
public String Formatter(String rut) {
String mString;
if(rut.length()==4){
mString = rut.substring(0,4)+",";
}else if(rut.length()==5){
mString = rut.substring(0,4)+","+rut.substring(3,4);
}else
mString = rut.substring(0,4)+","+rut.substring(3,5);
return mString;
}
在您的 public void afterTextChanged(Editable s)
方法中更改 Editable 对象而不是将新对象分配给引用 s
例如
@Override
public void afterTextChanged(Editable s) {
if (s.length() < 4)
s.append("abc");
}
发生这种情况是因为 EditText
上的原始文本来自 s
引用的对象,如果您将新对象分配给此引用,它不会影响原始对象,因此它不会' 影响视图中的文本。
我用这个解决了:
@Override
public void afterTextChanged(Editable s) {
try {
input.removeTextChangedListener(this);
if(s.length()>4){
s = new SpannableStringBuilder( Formatter(s.toString()));
input.setText(s);
}
input.addTextChangedListener(this);
} catch (Exception ex) {
ex.printStackTrace();
input.addTextChangedListener(this);
}
更改后如何更改编辑文本?方法有效,但 edittext 没有改变。我可以在 aftertextchanged 中使用 setview 吗?片段中的警报对话框所以很难,我用这个应用程序崩溃了
AlertDialog.Builder builder = new AlertDialog.Builder(this.getContext());
builder.setTitle("Lütfen tutar girin");
final EditText input = new EditText(this.getContext());
input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
builder.setView(input);
input.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) {
try {
if(s.length()>=4) {
s = new SpannableStringBuilder(Formatter(s.toString()));
}
}catch (NumberFormatException e){
}
}
});
builder.setPositiveButton("OK", (dialog, which) -> {
String pin = input.getText().toString();
if (!pin.isEmpty()) {
getFragmentManager().beginTransaction()
.replace(R.id.container, new CardFragment((int) (Float.parseFloat(pin) * 100), operation))
.addToBackStack(null).commit();
} else {
showMessage("Lütfen Tutar Giriniz");
}
});
builder.show();
它正在更改文本字段。格式化程序:
public String Formatter(String rut) {
String mString;
if(rut.length()==4){
mString = rut.substring(0,4)+",";
}else if(rut.length()==5){
mString = rut.substring(0,4)+","+rut.substring(3,4);
}else
mString = rut.substring(0,4)+","+rut.substring(3,5);
return mString;
}
在您的 public void afterTextChanged(Editable s)
方法中更改 Editable 对象而不是将新对象分配给引用 s
例如
@Override
public void afterTextChanged(Editable s) {
if (s.length() < 4)
s.append("abc");
}
发生这种情况是因为 EditText
上的原始文本来自 s
引用的对象,如果您将新对象分配给此引用,它不会影响原始对象,因此它不会' 影响视图中的文本。
我用这个解决了:
@Override
public void afterTextChanged(Editable s) {
try {
input.removeTextChangedListener(this);
if(s.length()>4){
s = new SpannableStringBuilder( Formatter(s.toString()));
input.setText(s);
}
input.addTextChangedListener(this);
} catch (Exception ex) {
ex.printStackTrace();
input.addTextChangedListener(this);
}