我有一个程序,其中有一个editText。我想实现TextWatcher以反映总editText中的更改。当编辑框达到最大字符数限制10时,我想显示警告对话框。当我实现文本观察程序时,它可以工作,但当它达到10个字符时,它显示两个警告框。这是我的密码
private TextWatcher mTextEditorWatcher = new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// This sets a textview to the current length
// mTextView.setText(String.valueOf(s.length()));
}
public void afterTextChanged(Editable s) {
if (s.length() == 10) {
messageBody.setImeOptions(EditorInfo.IME_ACTION_DONE);
AlertDialog.Builder alert = new AlertDialog.Builder(
SendSms.this);
alert.setMessage("You Cross the limit of 10 Words !");
alert.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
}
});
alert.show();
}
}
};
试试这个..
你有没有试过在文本更改
private TextWatcher mTextEditorWatcher = new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// This sets a textview to the current length
// mTextView.setText(String.valueOf(s.length()));
if (s.length() == 10) {
messageBody.setImeOptions(EditorInfo.IME_ACTION_DONE);
AlertDialog.Builder alert = new AlertDialog.Builder(
SendSms.this);
alert.setMessage("You Cross the limit of 10 Words !");
alert.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
}
});
alert.show();
}
}
public void afterTextChanged(Editable s) {
}
};
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
SendSms.this);
AlertDialog alertDialog ;
private TextWatcher mTextEditorWatcher = new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// This sets a textview to the current length
// mTextView.setText(String.valueOf(s.length()));
if (s.length() >= 10) {
messageBody.setImeOptions(EditorInfo.IME_ACTION_DONE);
alertDialogBuilder.setMessage("You Cross the limit of 10 Words !");
alertDialogBuilder.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
}
});
alertDialog = alertDialogBuilder.create();
if(alertDialog != null && !alertDialog.isShowing()){
alertDialog.show();
}
}
else
{
mTextView.setText(String.valueOf(s.length()));
}
}
public void afterTextChanged(Editable s) {
}
};
我已经编辑了代码。全局声明警报对话框,检查是否已经显示警报对话框,然后显示警报
这是此方法的常见行为。您需要使用标志进行处理。
使用此代码
private TextWatcher mTextEditorWatcher = new TextWatcher() {
boolean flag = false;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.length() == 10) {
if (!flag) {
messageBody.setImeOptions(EditorInfo.IME_ACTION_DONE);
AlertDialog.Builder alert = new AlertDialog.Builder(
SendSms.this);
alert.setMessage("You Cross the limit of 10 Words !");
alert.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
}
});
alert.show();
}
flag = true;
} else {
flag = false;
}
}
});
其他参考文献
TextWatcher事件被多次触发
TextWatcher的事件被调用了两次
更好的方法是使用setError。阅读如何使用它。
我必须取编辑文本的值并将其除以1.21....错误在哪里 错误:
问题内容: 我一直在阅读Observer模式,以保持UI处于最新状态,但仍然看不到它的用途。即使在我的特定对象中通知了我的MainActivity然后运行update();方法我仍然无法使用Pet对象来获取更新值,因为该对象是在Oncreate中创建的…而我只是无法创建新对象,因为那时变量会有所不同..这是我的实施,它似乎不起作用。 观察者/ MainActivity 可观察/宠物 问题答案: 首
我目前正在努力使用这个温度转换器应用程序。这个应用程序的工作原理是,如果我在空白文本中输入一个数字,它将计算到其他温度单位,而无需点击按钮(由文本观察者) 在这里,我需要使用Double value从EditText中提取数字,并使用该值生成一个等式,然后将其插入结果视图。所以在本例中,我使用: 在EditText中插入的值是多少。 应用程序一直在运行,直到我在文本字段中输入任何数字,应用程序崩溃
此外,为什么Viewmodel不能观察到它自己的LiveData的变化?
是否有一种设计模式可以形成一个“复合”观察者/可观察者? 我的意思是我有一个可观察的,它在某个变化时通知它的监听器。 每个监听器也是一个可观察的,并通知它自己的监听器(在某个动作上,它做了哪个动作是由第一个可观察的通知触发的)。 这种观察者/可观察的“链接”作为设计是可以的,还是有一个标准的模式?
问题内容: 给定汽车清单(),我可以这样做: 有没有办法我可以从一个到一个序列? 像没有参数的东西 问题答案: 您可以这样映射到: 请注意,flatMapping可能不会保留源可观察的顺序。如果订单对您很重要,请使用。