我尝试检查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();
}
是否有更快的方法来编写类似的东西,并为我的问题提供最佳解决方案?非常感谢你。
答案 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