Mon 06/17 2013

Android 入力チェック(バリデーション)ってどうするの? その3

15:360
Android
前回はAndroidFormEnhancerというライブラリを取り込んだので
今回は実際にそれを使ってみる。

こちらに作者ご本人からの説明があるので
それに素直に従って実装してみる。
https://github.com/ksoichiro/AndroidFormEnhancer/blob/master/README.ja.md

まず、こんなフォームを用意した。
enhancerTestフォーム


次に、このフォームの入力項目を定義したクラスを1つ作成する。

public class TestForm {

public String name;

public String gender;

public String birthday;

public List<String> hobbies;

}



そして今度はそれと入力項目のViewをidで紐づけていく。
名前(name)と性別(gender)を例とする。

▼TestForm.java

@Widget(id = R.id.testform_edittext_name)
public String name;

@Widget(id = R.id.testform_radiogroup_gender, values = {
@WidgetValue(id = R.id.testform_radiobutton_gender_male, value = "M"),
@WidgetValue(id = R.id.testform_radiobutton_gender_female, value = "F") })
public String gender;


▼activity_android_form_enhancer_test.xml

<EditText
android:id="@+id/testform_edittext_name" />

<RadioGroup
android:id="@+id/testform_radiogroup_gender" />
<RadioButton
android:id="@+id/testform_radiobutton_gender_male" />
<RadioButton
android:id="@+id/testform_radiobutton_gender_female" />
</RadioGroup>


そしていよいよ、チェック内容を定義する。
まずは名前。入力必須とする。

▼TestForm.java

@Widget(id = R.id.testform_edittext_name)
@Required
public String name;


次に、性別。こちらも入力必須。

▼TestForm.java

@Widget(id = R.id.testform_radiogroup_gender, values = {
@WidgetValue(id = R.id.testform_radiobutton_gender_male, value = "M"),
@WidgetValue(id = R.id.testform_radiobutton_gender_female, value = "F") })
@Required
public String gender;



最後にチェックを行う。
「チェック」ボタンを押下したときにチェックを行うこととする。
というわけで、下記のocClickメソッドの処理に注目してほしい。
▼AndroidFormEnhancerTestActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
~略~
Button checkButton = (Button) findViewById(R.id.testform_button_submit);
checkButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
ValidationResult result = new FormHelper(TestForm.class, AndroidFormEnhancerTestActivity.this)
.validate();
if (result.hasError()) {
// エラーメッセージを表示します
Toast.makeText(AndroidFormEnhancerTestActivity.this, result.getAllSerializedErrors(),
Toast.LENGTH_SHORT).show();
} else {

Toast.makeText(AndroidFormEnhancerTestActivity.this, "エラーはありません", Toast.LENGTH_SHORT).show();
}
}
});
}

FormHelperの第一引数に、さきほど定義したフォームのクラスを設定するのがポイント。
なんとこれだけでロジックごりごりせずに入力チェックが行える。

enhancerTestチェック
Comment form
Name
URL
Title
Comment
Pass (Edit)
管理者にのみ公開
Trackback URL
http://novdev.blog.fc2.com/tb.php/13-c948c9d3