轉載請標明出處:http://www.lxweimin.com/p/6307737432ae
一、概述
場景:如上圖,注冊時,需要獲取填入的內容,并且判斷是否為空,如果為空則提示。
如果你有耐心,可以一個個獲取editText,然后逐個獲取值,逐個用if else判斷是否為空。
下面就是為解決這一個繁瑣的問題提供方案。
二、使用
效果圖
1、引入庫 compile 'com.wuwind.form:formlibrary:1.0.0'
2、在你的布局文件最外層嵌套
<com.wuwind.form.FormLayout android:id="@+id/formLayout" android:layout_width="match_parent" android:layout_height="match_parent">
中間略去...
</com.wuwind.form.FormLayout>
3、代碼
3.1
FormLayout formLayout = (FormLayout) findViewById(R.id.formLayout);
3.2
Map<String, String> results = formLayout.getResults();
//獲取表單中的內容
3.3
formLayout.reset();
//重置,清空
4.說明
<EditText style="@style/EditText_Black" android:hint="姓名" android:tag="name" />
- tag 為"null"不是必填字段(默認都是必填字段)
- 必填字段為空則彈出“請輸入xxx”提示,
- 調用getResult 返回結果map,key為設置的tag,如果tag為空的話 依次從1開始遞增。如果有必填字段為空,則返回null。
- 調用reset 清空表單。
三、實現原理
1.獲取所有的editText
private void getEditTexts(ViewGroup vg) { int childCount = vg.getChildCount(); for (int i = 0; i < childCount; i++) { View view = vg.getChildAt(i); if (view instanceof EditText) editTexts.add((EditText) view); else if (view instanceof ViewGroup) { getEditTexts((ViewGroup) view); } } }
2.獲取值的時候,遍歷初始化所獲取的editText,根據tag判讀是否為必填字段。
public Map<String, String> getResults() { key = 0; results.clear(); for (EditText editText : editTexts) { Object tag = editText.getTag(); String r = editText.getText().toString(); if ((tag == null || !tag.equals("null")) && TextUtils.isEmpty(r)) { checkEdit(editText.getHint().toString()); return null; } if (tag == null || tag.equals("null")) { key++; results.put(key + "", r); } else { results.put(tag.toString(), r); } } return results; }
源碼地址:https://github.com/wuwind/FormProject