从背面的字符串中删除破折号还是删除键?

时间:2018-11-10 09:31:16

标签: 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();
        }
    });

}

2 个答案:

答案 0 :(得分:0)

我记得前一段时间尝试做类似的事情。您首先需要检查对文本所做的更改是否已删除。。您还必须将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中,看是否可行。我认为这个答案应该有用。

答案 1 :(得分:0)

我使用库name

解决了该问题
let $thisBtn = $(this);
let formData = new FormData();
let $thisRow = $thisBtn.closest("tr");
$thisRow.find("input[name], select[name]").each(function() {
  formData.append(this.name, $(this).val());
});
相关问题