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

Java 具有不同条件的多个if语句,java,android,if-statement,Java,Android,If Statement,我尝试在我的EditText上检查用户输入,如果有一个或多个空值,验证图像将变为红色,并且在填充所有字段之前,页面不会移动。在我的例子中,我使用多个if语句,条件不同,但是 我遇到一个问题,当我输入两个EditText并且另一个EditText为空时,页面将从当前页面移动到新页面,而不应移动该页面。 这是我的代码: if (nama_pp.getText().toString().length()==0){img_namalengkap_pp.setImageResource(R.drawabl

我尝试在我的
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();
}

有没有一种更快的方法来编写类似的代码,并为我的问题提供最佳解决方案?非常感谢。

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

一个简单的修复方法是将第一个
if
语句替换为
else if

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

您可以将所有对象放在一个列表中,然后像这样迭代该列表:

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);
ArrayList EditText=新的ArrayList(9);
EditText.add(nama_pp);
编辑文本。添加(…);
布尔就绪=真;
用于(编辑文本编辑文本:编辑文本)
如果(editText.getText().toString().length()=0){ready=false;break;}
如果(准备就绪)
getFragmentManager();
else img_telepon_pp.setImageResource(R.drawable.espaj_Redu检查表);
至少打字少了


Sebastien Bianchi的想法也是一个好主意。

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

对于空字符串,我们可以使用,
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;
    }
}

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

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


为什么不添加一个textWatcher呢?它更客观。你不需要考虑条件,只需询问每个EditText你的输入是否有效。工作量更少,扩展性更强。你永远不会担心有这么多EditText

只是一个提示:使用安卓API的
TextUtils.isEmpty(字符串)
检查它是空的还是空的。对我来说似乎是个问题。因为您的代码可以工作,所以您只想进行优化。@donfuxx足够接近,但代码本身与最后一个
if block
有问题(逻辑错误)。我假设代码审查只接受工作和正确的代码?好的,如果也有bug,那么在这里就可以了;-)@AndrewT.谢谢你的提示你是否愿意解释一下你的代码以及为什么要使用它?@Zohrakan我的问题不仅仅是让我的代码更简单的更快的方法,当我输入两个EditText,而另一个EditText为空时,页面从当前页面移动到新页面,当它不应该被移动时,你可以进入Android Coders聊天室吗?我对
ImageView
有不同的名字,如果我用你的方式,我想它只能对
EditText
使用相同的
ImageView
然后你可以在不同的if块中分开,但是你能做的就不多了。是的,这就是我以前做的,我把它分成不同的if块。我对
ImageView
有不同的名称。如果我用你的方式,我想它只能对
EditText
使用相同的
ImageView
,但我认为你的想法与give
boolean
逻辑有关,好的,我试试看
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);
}