gpt4 book ai didi

java - AlertDialog 内的 TextWatcher 不工作

转载 作者:行者123 更新时间:2023-12-01 09:33:47 24 4
gpt4 key购买 nike

我正在尝试在 EditText 中实现一个掩码,当用户单击 TextView 字段并弹出警报对话框时,EditText 就会出现,该 EditText 位于 AlertDialog 内,但不知何故监听器不工作。我在这里缺少什么?

 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

numero = (TextView) findViewById(R.id.edit_numero);

numero.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog("Text");
}
});
}


public void dialog(String titulo) {

AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);

dialog.setCancelable(true);

LayoutInflater factory = LayoutInflater.from(MainActivity.this);
View view = factory.inflate(R.layout.observacao, null);

EditText observacao = (EditText) view.findViewById(R.id.numero);
Mask.insert("###.###.###-##", observacao);

TextView obslabel = (TextView) view.findViewById(R.id.obslabel);

obslabel.setText(titulo);

dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {



}
});

dialog.setNegativeButton("CANCELAR", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});

dialog.setView(view);

dialog.show();
}

public static class Mask {
public static String unmask(String s) {
return s.replaceAll("[.]", "").replaceAll("[-]", "")
.replaceAll("[/]", "").replaceAll("[(]", "")
.replaceAll("[)]", "");
}

public static TextWatcher insert(final String mask, final EditText ediTxt) {
return new TextWatcher() {
boolean isUpdating;
String old = "";

public void onTextChanged(CharSequence s, int start, int before,
int count) {
String str = Mask.unmask(s.toString());
String mascara = "";
if (isUpdating) {
old = str;
isUpdating = false;
return;
}
int i = 0;
for (char m : mask.toCharArray()) {
if (m != '#' && str.length() > old.length()) {
mascara += m;
continue;
}
try {
mascara += str.charAt(i);
} catch (Exception e) {
break;
}
i++;
}
isUpdating = true;
ediTxt.setText(mascara);
ediTxt.setSelection(mascara.length());
}

public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}

public void afterTextChanged(Editable s) {
}
};
}
}

最佳答案

您必须使用通过调用获得的TextWatcher

Mask.insert("###.###.###-##", observacao);

使用 EditText,因此将该行更改为

observacao.addTextChangedListener(Mask.insert("###.###.###-##", observacao));

关于java - AlertDialog 内的 TextWatcher 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39168283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com