如何减少if-else语句

时间:2013-10-24 06:08:34

标签: java android if-statement

我的代码:

if(!"".equals(et1.getText().toString())){
   Toast.makeText(getActivity(), "Please enter text1", Toast.LENGTH_SHORT).show();
} else if(!"".equals(et2.getText().toString())){
   Toast.makeText(getActivity(), "Please enter text2", Toast.LENGTH_SHORT).show();
} else if(!"".equals(et3.getText().toString())){
   Toast.makeText(getActivity(), "Please enter text3", Toast.LENGTH_SHORT).show();
} else if(!"".equals(et4.getText().toString())){
   Toast.makeText(getActivity(), "Please enter text4", Toast.LENGTH_SHORT).show();
} else if(!"".equals(et5.getText().toString())){
   Toast.makeText(getActivity(), "Please enter text5", Toast.LENGTH_SHORT).show();
} 

//总共13个字段,所以这将接近13检查。所以我想知道是否有可能检查一个陈述并找出哪个字段留空。

谢谢。

5 个答案:

答案 0 :(得分:5)

将对象(et1,2,3,...)存储在一个数组中,然后迭代它。

答案 1 :(得分:1)

您可以在字段中添加textwatcher。请参阅下面的代码段。

private class GenericTextWatcher implements TextWatcher {

    private GenericTextWatcher() {

    }

    public void afterTextChanged(Editable editable) {

       if(editable.toString().equals(""))
       {
           Toast.makeText(UrActivity.this, "ur toast", Toast.LENGTH_LONG).show();
       }
    }

    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    }

    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    }
}

然后注册textlistener

editext.addTextChangedListener(new GenericTextWatcher());

在实际按键上验证它会更快,然后再进行检查。

答案 2 :(得分:1)

将其存储在List

for (EditText et : etList) {
    if(!"".equals(et.getText().toString()))
}

答案 3 :(得分:0)

我会实现代表必要控件的视图类(用Model-View-Controller表示法),并使用polymorphism来避免这些if语句。

<强>更新

据我所知,有一个输入验证机制。我会做以下几点。

我的解释可能比您预期的特定任务更为通用。但我认为它将来会对你有所帮助。请注意我不太熟悉Android API,因此您可能需要对我的某些Android API类(例如表示字段的类)的引用进行辅助。

所以,第一步。声明字段原型:

abstract FieldPrototype extends AndroidFieldClass {

    /**
    * Checks field contents and returns true if field is ok, otherwise shows popup validation message and returns false.
    * @return see method description.
    */
    public abstract boolean checkField();

}


class Et1Field extends FieldPrototype {

    private String value;

    public Et1Field() {
        super();
        // your initialization code here
    }

    public boolean checkField() {
        if (value == null || "".equals(value)) {
            // show validation message specific for Et1Field class instance.
            return false;
        }

        return true;
    }
}

// do the same steps for Et2Field .. Et13Field if those fields are different, 
// and implement specific validation functionality for every kind of a field.

在您的屏幕类中,保留此屏幕上显示的所有字段的数组。在屏幕上的保存事件中,将save事件发送到所有字段实例。 每个字段都将调用它自己的checkField()方法并验证它自己的内容,而不显示外部的特定字段实现。 如果字段验证失败,您只需停下来让用户更正字段内容。

答案 4 :(得分:0)

使一个函数检查空白并像这样调用一次......

    checkBlank(et1.getText().toString()), 1);
checkBlank(et2.getText().toString()), 2);
checkBlank(et3.getText().toString()), 3);..and so on

这是功能..

private void checkBlank(String edt,int pos) {
    // TODO Auto-generated method stub
    if(edt.equals(""))
    {
        Toast.makeText(getApplicationContext(), "Please enter text"+pos, Toast.LENGTH_SHORT).show();
    }

}

Godd Luck:)