2013-10-24 32 views
0

我的代码:我怎样才能减少if-else语句

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检查。所以我只想知道是否有任何可能性来检查一个陈述,并找出哪个字段是空的。

谢谢。

+6

wh y是这个标记的C++或c? – NiRR

+1

我认为,不要为所有字段显示不同的Toast消息,而只需使用单个消息。像“请填写所有字段”。然后,您可以使用&&运算符将条件写入一行。 – Arshu

+0

@NiRR nice catch – Keerthivasan

回答

1

其存放在List

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

我没有问这种类型的答案,但是这减少了我的代码长度。谢谢。 – Gunaseelan

0

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

UPDATE:

据我所知,示出了输入验证机制。我会做以下。

我的解释可能比您对特定任务的预期更笼统。但我认为它将在未来帮助你。并且请注意,我对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()方法并验证它自己的内容,而不在外面显示特定的字段实现。 如果字段验证失败,则只需停止并让用户更正字段内容。

+0

请你详细说明一下,因为我没有得到你。 – Gunaseelan

+0

@Gunaseelan我已添加更新,请检查它。 – 2013-10-24 08:41:06

5

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

+0

虽然它的工作原理,我认为这是违反面向对象的方法。当你需要使用像OP这样的许多if语句时,考虑多态性来解决这个任务。 – 2013-10-24 06:14:04

+0

我只想在一次执行中检查,无论如何感谢您的帮助。已添加+1。 – Gunaseelan

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

验证它的实际按键会更快然后泡吧后的检查。

+0

我只想在一个执行过程中检查所有'EditText',无论如何感谢您的帮助。已添加+1。 – Gunaseelan

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 :)

+1

你的代码和发布的问题是执行相同的,你只是写在一个方法不再改变.. –