我已经使用addTextChangedListener(new TextWatcher()
删除了前导零,但是它仅适用于Android软键盘numpad
而非我的自定义numpad
。 n0
是归零按钮。基本上,每当我按下零按钮时,我的应用就会崩溃。
//custom zero button n0.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { input1.append("0"); operationA(); } });
我只需要零按钮在单击时不会返回任何值的代码即可避免前导零。以下是addTextChangedListener(new TextWatcher()
input1.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) { if (s.toString().length() == 1 && s.toString().startsWith("0")) { s.clear(); } } });
得到这些错误:
AndroidRuntime: FATAL EXCEPTION: main Process: context, PID: 12408 java.lang.NumberFormatException: empty String at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1071) at java.lang.Double.valueOf(Double.java:511) at context.operationA(MainActivity.java:478) at context$17.onClick(MainActivity.java:383) at android.view.View.performClick(View.java:5610) at android.view.View$PerformClick.run(View.java:22265) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
答案 0 :(得分:1)
当您尝试在double
方法中将字符串解析为operationA
时发生错误,但字符串为空,在转换之前检查字符串是否为空
答案 1 :(得分:0)
我有同样的问题。我通过编写下面的函数来解决它:
private String trimLeadingZeros(String string)
{
boolean startsWithZero = true;
while (startsWithZero)
{
if(string.startsWith("0") && !string.substring(1,2).equalsIgnoreCase("."))
{string = string.substring(1, string.length());}
else
{startsWithZero = false;}
}
return string;
}
此函数还可以防止从00000.123之类的字符串中修剪所有零(它将返回0.123而不是无用的.123)。
答案 2 :(得分:0)
要删除EditText中的前导零,您可以使用TextWatcher
来检测第一个键入的零并清除它
TextWatcher watcher = 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) {
if (s.toString().equals("0")) {
editText.removeTextChangedListener(this);
editText.setText("");
editText.addTextChangedListener(this);
}
}
@Override
public void afterTextChanged(Editable s) {
}
};
editText.addTextChangedListener(watcher);