清除前缀编辑文本值

时间:2016-09-10 17:44:38

标签: java android android-edittext

我正在尝试使用输入的编辑文字附加前缀。它与下面的代码完美配合。但问题是,当我按下取消按钮时,无法清除前缀文字。当按下键盘取消按钮时我也要清除₹,以便我可以再次看到编辑文字提示

代码:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final EditText editText = (EditText)findViewById(R.id.edit);
        editText.setText("");
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                    if(!editText.getText().toString().startsWith("₹**₹**")){
                        editText.setText("₹**₹**"); // not able to use that sign , so that's why those asterisk. It's actually just ₹ 
                        Selection.setSelection(editText.getText(), editText.getText().length());

                    }
            }
        });
    }
}

Edit text value plus prefixed with dollar sign

in this picture , i want to clear the sign when pressing the cancel button

2 个答案:

答案 0 :(得分:0)

取消按钮有什么作用?它是否从EditText中删除所有文本? 如果是这样,您可以检查afterTextChanged方法,如果EditText中的文本为空。仅当它不为空时,添加符号。您的方法可能如下所示:

@Override
public void afterTextChanged(Editable editable) {
    if(!editText.getText().toString().startsWith("₹**₹**")){
        editText.setText("₹**₹**"); // not able to use that sign , so that's why those asterisk. It's actually just ₹ 
        Selection.setSelection(editText.getText(), editText.getText().length());

    } else {
        // The text starts with the sign, if it is equal to it, set the text to be empty
        if(editText.getText().toString().equals("₹**₹**")){
            editText.setText("");
        }
    }
}

我确信这可以重构为更清洁的解决方案,但这应该适合你。

您必须解决的问题如下:通过清除EditText中的文字,您正在更改文字,这会触发addTextChangedListener方法。

答案 1 :(得分:0)

在点击“取消”按钮的同时设置一些布尔标志。检查afterTextChanged方法中的标志值。

  1. 声明boolean isCancel = false;
  2. 您的取消按钮单击侦听器

    btnCancel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            isCancel = true;
            editText.setText("");
        }
    });
    
  3. 更改afterTextChanged

    @Override
    public void afterTextChanged(Editable editable) {
        if(!isCancel) {
            if(!editText.getText().toString().startsWith("₹**₹**")){
                editText.setText("₹**₹**");
                Selection.setSelection(editText.getText(), editText.getText().length());
            }
        } else {
            isCancel = false;
        }
    }