3

整晚都被困在这个问题上,似乎没有一个简单的解决方案。我正在尝试验证我的所有 4 个字段以确保每个字段中都有一个值,如果在我单击“计算”按钮后每个字段中都有一个值,则将计算总数。如果其中任何一个没有值,它将在每个没有值的 EditText 处返回错误,并且不会计算总数。

cal.setOnClickListener(new View.OnClickListener()
        {

            @Override
            public void onClick(View v) 
            {
                // TODO Auto-generated method stub  
                if( eLoan.getText().toString().length() == 0 )
                {
                    eLoan.setError( "A value is required" );
                }
                else if( eWage.getText().toString().length() == 0 )
                {
                    eWage.setError( "A value is required" );
                }
                else if( eGrant.getText().toString().length() == 0 )
                {
                    eGrant.setError( "A value is required" );
                }
                else if( eOther.getText().toString().length() == 0 )
                {
                    eOther.setError( "A value is required" );
                }
                else
                convertToString();
                converToDouble();               
                inTotal = inLoan + inWage + inGrant + inOther;
                DecimalFormat currency = new DecimalFormat(".00");
                TotalInNum.setText("£" + currency.format(inTotal));
            }

        });

我无法理解它,我试图合并一个布尔语句来检查每个 EditText 但它也不起作用。我相信有一种更简单的方法可以做到这一点。

我对android很陌生,自学它,所以如果人们能就我做错的事情提出建议并给我一个我应该做什么的例子,我将不胜感激。

感谢所有回复的人。

4

4 回答 4

4

我认为问题是你最后缺少花饰,这else是逻辑所在。就像现在一样,只有convertToString();最后的一部分,else无论您设置什么错误,最后四个语句都会执行。

尝试这个:

cal.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View v) 
    {
        boolean failFlag = false;
        // TODO Auto-generated method stub  
        if( eLoan.getText().toString().trim().length() == 0 )
        {
            failFlag = true;
            eLoan.setError( "A value is required" );
        }
        if( eWage.getText().toString().trim().length() == 0 )
        {
            failFlag = true;
            eWage.setError( "A value is required" );
        }
        if( eGrant.getText().toString().trim().length() == 0 )
        {
            failFlag = true;
            eGrant.setError( "A value is required" );
        }
        if( eOther.getText().toString().trim().length() == 0 )
        {
            failFlag = true;                
            eOther.setError( "A value is required" );
        }
        // if all are fine
        if (failFlag == false) {
            convertToString();
            converToDouble();               
            inTotal = inLoan + inWage + inGrant + inOther;
            DecimalFormat currency = new DecimalFormat(".00");
            TotalInNum.setText("£" + currency.format(inTotal));
        }
    }

});

如果存在更多错误,此代码将设置多个错误。您的只会发出第一个发现的错误信号。

于 2013-06-12T22:12:11.020 回答
4

只是建立在其他人所说的基础上。你可以做这样的事情......

制作一个循环遍历您的 EditTexts 的验证方法,检查它们是否为空,如果为 true 则设置错误,然后返回 true 或 false ...

public boolean validateEditText(int[] ids)
{
    boolean isEmpty = false;

    for(int id: ids)
    {
        EditText et = (EditText)findViewById(id);

        if(TextUtils.isEmpty(et.getText().toString()))
        {
            et.setError("Must enter Value");
            isEmpty = true;
        }
    }

    return isEmpty;
}

列出你的 EditText id's ..

int[] ids = new int[]
{
    R.id.section1_item1_textfield,
    R.id.section1_item2_textfield,
    R.id.section1_item3_textfield
};

现在使用您的验证方法检查是否为空...

if(!validateEditText(ids)) 
{
    //if not empty do something
}else{
    //if empty do somethingelse
}

要使用上述方法,您需要...

import android.text.TextUtils;

这样做的好处是您可以简单地将所有 EditTexts 放入列表中,剩下的事情就会为您完成。维护大量的 if 语句可能很烦人且耗时。

于 2017-02-14T18:29:04.733 回答
1

我认为解决这个问题的最好方法是下面的例子:

private boolean verifyIfEditTextIsFilled(EditText... editText) {

    boolean result = true;

    for (EditText text : editText) {

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

            final View focusView = text;
            text.setError(getString(R.string.error_required));
            focusView.requestFocus();
            result = false;
        }
    }
    return result;
}
于 2017-08-07T20:39:54.910 回答
0

迟到的答案但可以帮助有需要的人。

最简单的方法 -->

创建方法如下

public Boolean validateUserInput()
    {
        Boolean isAnyFieldsEmpty=false;

        if (position.getText().toString()==null || position.getText().toString().equalsIgnoreCase(""))
        {
            position.setError("Empty postion");
            isAnyFieldsEmpty=true;
        }
        else{
            position.setError(null);
            isAnyFieldsEmpty=false;
        }

        if (eligiblity.getText().toString()==null || eligiblity.getText().toString().equalsIgnoreCase(""))
        {
            eligiblity.setError("Empty postion");
            isAnyFieldsEmpty=true;
        }
        else{
            eligiblity.setError(null);
            isAnyFieldsEmpty=false;
        }

        if (skillsRequired.getText().toString()==null || skillsRequired.getText().toString().equalsIgnoreCase(""))
        {
            skillsRequired.setError("Empty postion");
            isAnyFieldsEmpty=true;
        }
        else{
            skillsRequired.setError(null);
            isAnyFieldsEmpty=false;
        }

        if (desc.getText().toString()==null || desc.getText().toString().equalsIgnoreCase(""))
        {
            desc.setError("Empty postion");
            isAnyFieldsEmpty=true;
        }
        else{
            desc.setError(null);
            isAnyFieldsEmpty=false;
        }

        if (interviewFrmDate.getText().toString()==null || interviewFrmDate.getText().toString().equalsIgnoreCase(""))
        {
            interviewFrmDate.setError("choose date");
            isAnyFieldsEmpty=true;
        }else{
            interviewFrmDate.setError(null);
            isAnyFieldsEmpty=false;
        }

        if (interviewToDate.getText().toString()==null || interviewToDate.getText().toString().equalsIgnoreCase(""))
        {
            interviewToDate.setError("choose date");
            isAnyFieldsEmpty=true;
        }else{
            interviewToDate.setError(null);
            isAnyFieldsEmpty=false;
        }

        if (interviewToTime.getText().toString()==null || interviewToTime.getText().toString().equalsIgnoreCase(""))
        {
            interviewToTime.setError("choose date");
            isAnyFieldsEmpty=true;
        }else{
            interviewToTime.setError(null);
            isAnyFieldsEmpty=false;
        }

        return isAnyFieldsEmpty;
    }

现在在您的按钮上单击调用该方法,如下所示并验证

@overide
public void onclick
{
Boolean isinputEmpty=validateUserInput()
if(isinputEmpty==false)
{

///process your save or whatever processing it is
}

}
于 2016-11-15T07:30:38.930 回答