java - 从背面的字符串中删除破折号或删除键?

标签 java android

我有代码在第 5 个和第 12 个数字后添加破折号,但是在删除这些数字时,按退格键后破折号不会被删除。 删除最后一位数字后就卡住了。

这是我从堆栈链接之一实现的代码。

EditText Cnic;
int maxLength = 15;
int len =0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

 Cnic = (EditText)findViewById(R.id.cnic_edtext);

    Cnic.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLength)});
    Cnic.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) {
            String str =  s.toString();
            if(s.length() == 5 || s.length() == 13){

                str += "-";
                Cnic.setText(str);
                Cnic.setSelection(str.length());
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

            String str =  s.toString();
            len = str.length();
        }
    });

}

最佳答案

我记得不久前尝试过做类似的事情。您首先要做的是检查对文本所做的更改是否为删除。您还必须将 EditText 的文本设置为原始文本的子字符串,这样“-”就不再是其中的一部分。我对下面的代码进行了更改。

检查下面的代码,如果您有任何其他问题,请在下面评论。

int length = 0;
@Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        length = Cnic.getText().toString().length();
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        int new_length = Cnic.getText().toString().length();
        //The length has decreased, meaning that something was deleted. 
        if(length > new_length){
            String str =  s.toString();
            if(s.length() == 5 || s.length() == 13){
                //This sets the text to what was in the EditText, except it excludes the '-'
                Cnic.setText(str.subString(0, s.length()-2));
                Cnic.setSelection(str.length());
            }
        }else{
            //The action that  happened was not a delete, so just add the dashes to the text. 
            String str =  s.toString();
            if(s.length() == 5 || s.length() == 13){

                str += "-";
                Cnic.setText(str);
                Cnic.setSelection(str.length());
            }
        }

    }

    @Override
    public void afterTextChanged(Editable s) {

        String str =  s.toString();
        len = str.length();
    }

如果这不起作用,请尝试将 onTextChanged 中的代码放入 afterTextChanged 中,看看是否有效。我认为这个答案应该有效。

关于java - 从背面的字符串中删除破折号或删除键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53237636/

相关文章:

java - 在 Servlet 中读取文件并拆分字符串

java - Jtable中只显示数据库表的一行

java - ModelMapper - 将 DTO 的属性映射到具有该属性的关系的实体内

android - 如何覆盖 android 4.0 中的主页按钮

javascript - 使用 html 中的 PHP 将 HTTP post 数据从 Android 应用程序发送到服务器

Android - 翻译 View 后仍保留空白

android - 在 Android 上检测 FPU 存在

java - java.lang.UnsupportedOperationException:未由DistributedFileSystem FileSystem实现实现

java - 使用 PDPageContentStream.drawLine 时出现 pdfbox 错误

android - 如何防止约束 View 中的 textView 离开屏幕