Поле editText требуется, прежде чем переходить к другому действию

У меня есть подтверждение для editText. Если поле editText пустое, оно должно завершиться неудачей и остановить переход пользователя на другой Activity, поскольку это значение необходимо. Как это сделать? Я знаю, что это основной вопрос, но я не могу понять, как это сделать.

Мой код:

btninsert = (Button)findViewById(R.id.btn_insert);
btninsert.setOnClickListener( new View.OnClickListener() {
    public void onClick(View v) {
        insertValues();
        EditText userName = (EditText) findViewById(R.id.editText1);

        if( userName.getText().toString().length() == 0 )
            userName.setError( "First name is required!" );

        Intent i = new Intent(getApplicationContext(), Login.class);
        startActivity(i);
    }
});

При нажатии этого Button пользователь перенаправляется на следующий экран, но мне нужно, чтобы при отсутствии проверки они оставались на текущем Activity, и только когда проверка прошла успешно (то есть значение было введено), они идут к следующему Activity.

Ответы

Ответ 1

Это легко... проверьте, пуст ли ваш EditText пустым, как показано ниже в приведенном ниже примере.

if( TextUtils.isEmpty(userName.getText())){
   /**
    *   You can Toast a message here that the Username is Empty    
    **/

   userName.setError( "First name is required!" );

}else{
   Intent i = new Intent(getApplicationContext(), Login.class);
   startActivity(i);
}

Ответ 2

Попробуйте следующее:

bt.setOnClickListener(new OnClickListener() {
    public void onClick(View arg0)
    {
        String  str=et.getText().toString();

        if(str.equalsIgnoreCase(""))
        {
            et.setHint("please enter username");//it gives user to hint
            et.setError("please enter username");//it gives user to info message //use any one //
        }
        else
        {
            Intent in=new Intent(getApplicationContext(),second.class);
            startActivity(in);
        }
    }
});

Ответ 3

Вы также можете попробовать следующее:

 if ( ( userName.getText().toString().trim().equals("")) ) 
 {
      Toast.makeText(getApplicationContext(), "User name is empty", Toast.LENGTH_SHORT).show();
 }
 else
 {
      Intent i = new Intent(getApplicationContext(), Login.class);
      startActivity(i);
 }

Ответ 4

Лучше проверить пустой текстовый экран, используя условие If для всех необходимых или специальных случаев проверки и setError для фокусировки.

If(txtName.getText().toString().trim().equals(""))
{
//Your message or any other validation
}

Ответ 5

Я столкнулся с аналогичной проблемой. В моем случае у меня было много Edittexts для проверки, некоторые из них были дочерними для других макетов. Совет. Все представления должны быть в одном корневом представлении. Итак, чтобы быть простым:

...
LinearLayout viewGroup = (LinearLayout) findViewById(R.id.viewGroup);
checkFieldsRequired(viewGroup);
...

public boolean checkFieldsRequired(ViewGroup viewGroup){

    int count = viewGroup.getChildCount();
    for (int i = 0; i < count; i++) {
        View view = viewGroup.getChildAt(i);
        if (view instanceof ViewGroup)
            checkFieldsRequired((ViewGroup) view);
        else if (view instanceof EditText) {
            EditText edittext = (EditText) view;
            if (edittext.getText().toString().trim().equals("")) {                  
                edittext.setError("Required!");                 
            }
        }
    }

    return false;
}

Ответ 6

Я понимаю это старый вопрос, но может ли это помочь, вы можете использовать .isEmpty() вместо .equals()

if( userName.getText().toString().isEmpty()){

   /**
    *   You can Toast a message here that the Username is Empty    
    **/

   userName.setError( "First name is required!" );

}else{
   Intent i = new Intent(getApplicationContext(), Login.class);
   startActivity(i);
}