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

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

有没有更快的方法来编写这样的东西和我的问题的最佳解决方案? 非常感谢你。

===============>>#1 票数: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的想法也很好。

===============>>#2 票数: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
}

===============>>#3 票数:0

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

如果出现以下情况,一个简单的解决方法是用else if替换除第一个if语句之外

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

===============>>#4 票数: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);
}

===============>>#5 票数:0

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

  ask by Menma translate from so

未解决问题?本站智能推荐: