繁体   English   中英

我如何减少if-else语句

[英]How can I reduce if-else statements

我的代码:

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个检查。 因此,仅我想知道是否有可能检查一个语句并查找哪个文件保留为空。

谢谢。

将对象(et1、2、3,...)存储在数组中,然后对其进行迭代。

您可以将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());

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

将其存储在List

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

我将实现表示必要控件的视图类(以Model-View-Controller表示法),并将使用多态性来避免这些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()方法并验证其自身的内容,而无需在外部显示特定的字段实现。 如果字段验证失败,您只需停止操作,然后让用户更正字段内容。

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

    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();
    }

}

天哪:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM