Java 在android中使用seterror进行edittext验证

Java 在android中使用seterror进行edittext验证,java,android,Java,Android,我正在尝试使用seterror方法验证edittext。我正在使用焦点更改侦听器检查edittext的长度是否为零。但是,当我尝试键入所需的edittext时,我无法键入,并且文本正在键入第二个。请帮助 守则: package com.example.usernamevalidation; import android.os.Bundle; import android.app.Activity; import android.text.Editable; import android.tex

我正在尝试使用seterror方法验证edittext。我正在使用焦点更改侦听器检查edittext的长度是否为零。但是,当我尝试键入所需的edittext时,我无法键入,并且文本正在键入第二个。请帮助

守则:

package com.example.usernamevalidation;

import android.os.Bundle;
import android.app.Activity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.widget.EditText;

public class MainActivity extends Activity {
    EditText txtusername,txtpassword;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txtusername=(EditText) findViewById(R.id.txtusername);
        txtpassword=(EditText) findViewById(R.id.txtpassword);
        txtusername.setOnFocusChangeListener(new OnFocusChangeListener() {

            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if(!hasFocus)
                {
                    if(txtusername.getText().toString().length()==0)
                    {
                        txtusername.requestFocus();
                        txtusername.setError("Username cannot be left blank");
                    }
                }
            }
        });


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}
xml:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    >
    <EditText
        android:layout_width="300px"
        android:layout_height="wrap_content"
        android:id="@+id/txtusername"
        />
    <EditText
        android:layout_width="300px"
        android:layout_height="wrap_content"
        android:id="@+id/txtpassword"
        />

</LinearLayout>

使用TextWatcher并在其ContextChanged中检查您想要的任何内容。

非常简单,您创建的代码越多,代码就越复杂,让我们尝试使用TextUtils。如果字符串为null或长度为0,isEmpty-Returns true

EditText txtusername = (EditText) findViewById(R.id.txtusername);
EditText txtpassword = (EditText) findViewById(R.id.txtpassword);

    if(TextUtils.isEmpty(txtusername.getText().toString())){
        txtusername.setError("Username cannot be left blank");
        txtusername.requestFocus();
    }
    if(TextUtils.isEmpty(txtpassword.getText().toString())){
        txtpassword.setError("password cannot be left blank");
        txtpassword.requestFocus();
    }

   //do logging process 

如果我这样做,则不会显示消息。只会显示感叹号。setonfocuschange侦听器也是正确的选择。我想检查何时离开edittext。但这一行表示,如果当前焦点不在那里,则edittext显示您不能在此写,因此无法保持该请求焦点的条件行得通。但我从一开始就显示了错误。我希望只有在忽略第一个编辑文本并转到第二个编辑文本时才会显示错误。
EditText txtusername = (EditText) findViewById(R.id.txtusername);
EditText txtpassword = (EditText) findViewById(R.id.txtpassword);

    if(TextUtils.isEmpty(txtusername.getText().toString())){
        txtusername.setError("Username cannot be left blank");
        txtusername.requestFocus();
    }
    if(TextUtils.isEmpty(txtpassword.getText().toString())){
        txtpassword.setError("password cannot be left blank");
        txtpassword.requestFocus();
    }

   //do logging process