【问题标题】:editText field is required before moving on to another Activity在移动到另一个活动之前需要 editText 字段
【发布时间】:2012-07-17 02:42:44
【问题描述】:

我已验证 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

【问题讨论】:

    标签: android validation android-edittext onclicklistener


    【解决方案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);
    }
    

    这是一个 Kotlin 版本:

    userName.takeIf { it.isEmpty() }?.let {
      userName.error = "First name is required!"
    } ?: run {
       startActivity(Intent(applicationContext, this))
    }
    

    【讨论】:

    • 有没有办法在 xml 本身中提及任何字段为必填项,而不是在 java 中进行验证
    • @Jeyaseelan 如果您使用带有提示的 TextInputLayout 会怎样?
    【解决方案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】:

        我遇到了类似的问题。就我而言,我有很多 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;
        }
        

        【讨论】:

          【解决方案5】:

          我知道这是一个老问题,但这可能会有所帮助,您可以使用 .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);
          }
          

          【讨论】:

            【解决方案6】:

            最好使用 If 条件来测试所有必需或特殊验证情况的空文本字段,并将 setError 设置为焦点。

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

            【讨论】:

              【解决方案7】:

              我知道这是一篇旧帖子,但我需要在我的应用程序中使用类似的功能,因此我决定开发一个简单但功能强大的验证器以便于重用。

              link for github repo 它非常易于使用。

              1. 创建一个您希望为必填字段的列表
              2. 调用validateViewFields方法并传递视图列表

              Activity 的代码示例:

                  public class AddContractActivity extends AppCompatActivity {
              
                  TextView contractDescriptionTextView;
                  TextView totalAmountTextView;
              
                  List<View> fieldsToBeValidated;
              
                  @Override
                  protected void onCreate(Bundle savedInstanceState) {
                      super.onCreate(savedInstanceState);
                      setContentView(R.layout.activity_add_contract);
              
                      contractDescriptionTextView = findViewById(R.id.contractDescriptionEditText);
                      totalAmountTextView = findViewById(R.id.totalAmountText);
              
                      fieldsToBeValidated = new ArrayList<>(Arrays.asList(
                              contractDescriptionTextView,
                              totalAmountTextView));
              
                      saveButton.setOnClickListener(new View.OnClickListener() {
                          @Override
                          public void onClick(View v) {
                              if (!UIValidator.validateViewFields(fieldsToBeValidated, true)) {
                                  Toast.makeText(AddContractActivity.this, "Missing Fields", Toast.LENGTH_SHORT).show();
                                  mainScrollView.post(new Runnable() {
                                      @Override
                                      public void run() {
                                          mainScrollView.smoothScrollTo(0, 0);
                                      }
                                  });
                                  return;
                              }
                          }
                      });
                  }
              }
              

              【讨论】:

              • 这个答案使一个简单的解决方案复杂化
              • @BilalRammal 不是当要验证的字段达到 15 时
              猜你喜欢
              • 1970-01-01
              • 2019-08-24
              • 1970-01-01
              • 1970-01-01
              • 2013-07-05
              • 2018-02-04
              • 1970-01-01
              • 2017-01-07
              • 1970-01-01
              相关资源
              最近更新 更多