具有不同条件的多个if语句

时间:2014-04-21 02:50:47

标签: java android if-statement

我尝试检查EditText上的用户输入,如果有一个或多个空值,验证图像将变为红色,并且在填充所​​有字段之前页面将不会移动。我在我的案例中使用了多个if语句,但是 我遇到问题,当我输入两个EditText而另一个EditText为空时,页面从当前页面移动到新页面,不应该移动。 这是我的代码:

if (nama_pp.getText().toString().length()==0){img_namalengkap_pp.setImageResource(R.drawable.espaj_red_checklist);}
            if (ibu_pp.getText().toString().length()==0){img_namaibu_pp.setImageResource(R.drawable.espaj_red_checklist);}
            if (nomor_bukti_pp.getText().toString().length()==0){img_nomeridentitas_pp.setImageResource(R.drawable.espaj_red_checklist);}
            if (tempat_pp.getText().toString().length()==0){img_tempat_pp.setImageResource(R.drawable.espaj_red_checklist);}
            if (ttl_pp.getText().toString().length()==0){img_tgllahir_pp.setImageResource(R.drawable.espaj_red_checklist);}
            if (alamat_pp.getText().toString().length()==0){img_alamat_pp.setImageResource(R.drawable.espaj_red_checklist);}
            if (kota_pp.getText().toString().length()==0){img_kota_pp.setImageResource(R.drawable.espaj_red_checklist);}
            if (kdtlp1_pp.getText().toString().length()==0){img_telepon_pp.setImageResource(R.drawable.espaj_red_checklist);}
            if (telp1_pp.getText().toString().length()==0){img_telepon_pp.setImageResource(R.drawable.espaj_red_checklist);}
else {
    getFragmentManager().beginTransaction().replace(R.id.frame_container, new TertanggungPolis()).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).commit();
}

是否有更快的方法来编写类似的东西,并为我的问题提供最佳解决方案?非常感谢你。

5 个答案:

答案 0 :(得分:1)

您可以将所有对象放在一个列表中,并像这样遍历该列表:

ArrayList<EditText> editTexts = new ArrayList<>(9);

editTexts.add(nama_pp);
editTexts.add(...);
boolean ready = true;
for (EditText editText : editTexts)
    if (editText.getText().toString().length() == 0) { ready = false; break; }
if (ready)
    getFragmentManager().beginTransaction().replace(R.id.frame_container, new TertanggungPolis()).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).commit();
else img_telepon_pp.setImageResource(R.drawable.espaj_red_checklist);

至少打字少了。

Sebastien Bianchi的想法也很好。

答案 1 :(得分:1)

您可以将所有编辑文本放在一个数组列表中,将相应的图像视图放在另一个数组列表中。

对于我们可以使用的空字符串TextUtils.isEmpty(string),如果字符串为null或为空,则返回true。

试试这个:

ArrayList<EditText> editTexts = new ArrayList<EditText>();

editTexts.add(nama_pp);
editTexts.add(editetext2);

ArrayList<ImageView> imageViews =  new ArrayList<ImageView>();
imageViews.add(image1);
imageVioew.add(Image2);

boolean nextPage = true;

for (int i = 0; i < editTexts.length();i++) 
    if (editText[i].isEmpty(editText[i].getText.toString())) {
        imageViews[i].setImageResource(R.drawable.espaj_red_checklist);
        nextPage = false;
    }
}

在转到下一页之前,您可以检查以下内容:

if (nextPage) {
//Move to next page
}

答案 2 :(得分:0)

它正在转到下一页,因为您的else仅与上一个if匹配。因此,只要最后一次if测试失败,它就会转换到下一页。

一个简单的解决方法是用if替换第一个else if语句以外的所有语句:

if (condition1) { 
} else if (condition2) { 
} else {
    getFragmentManager() ...
}

答案 3 :(得分:0)

您可以使用||并创建isEmpty()方法使其更具可读性:

private boolean isEmpty(EditText et) {
    return et.getText().toString().length() == 0;
}

然后

if (isEmpty(ibu_pp) || isEmpty(nomor_bukti_pp) || ...  ) {
    img_telepon_pp.setImageResource(R.drawable.espaj_red_checklist);
}

答案 4 :(得分:0)

为什么不添加textWatcher?它更客观。你不需要考虑条件,你只要问每个EditText是你的输入是有效的。无效的工作,更多的可扩展性。你永远不会打扰有这么多edittexts