追加" @ gmail.com"在android中按下用户的任意键后,在EditText中

时间:2015-05-15 11:36:47

标签: android

我在考虑下面给出的逻辑

editTextUserName.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) {
                appendEmail(editTextUserName.getText().toString());
            }
        });    
 void appendEmail(String email){
        if( email.length()>=1){

            editTextUserName.setText("@gmail.com");
    }
}

这是示例代码而不是实际代码。这引发了stackoverflow异常。

任何人都可以解决isssue

3 个答案:

答案 0 :(得分:2)

您需要检查子串" @ gmail.com"已经存在,不需要再次setText。因为当你将文本设置为EditText时,它再次调用afterTextChange,然后你调用appendEmail,然后再次设置文本等。

void appendEmail(String email){
      if(!TextUtils.isEmpty(email) && email.contains("@gmail.com")){

            editTextUserName.setText(email + "@gmail.com");
      }

答案 1 :(得分:2)

我认为TextWatcher在这里不合适(如 m vai 所评论)。

在EditText标记中执行添加android:imeOptions="actionDone"

之类的操作
editText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_DONE) {
         editText.setText(editText.getText().toString()+"@gmail.com");  
        }
        return false;
    }
});

答案 2 :(得分:0)

没有测试,但我担心在你输入的每个字母后调用afterTextChanged()。如果是这种情况,你应该尝试其他回调,比如失去焦点:

mEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {

    @Override
    onFocusChange(View v, boolean hasFocus) {
        EditText edit = (EditText) v;
        String text = edit.getText().toString();
        if (!hasFocus && text.length() > 0) {
            edit.setText(text + "@gmail.com");
        }
    }
})