У меня есть класс, в котором пользователь может динамически генерировать представления EditText. Я пытаюсь проверить их, чтобы проверить, пусты ли они, когда пользователь переходит к следующей странице. Если они есть, то триггеры проверки приостанавливают процесс перехода на другую страницу, пока пользователь не заполнит поля EditText, которые он создал.Проверка динамически сгенерированных EditTexts
Вот что у меня есть:
поколение EditText
int EditTextID = 5000;
insertPoint = findViewById(R.id.questionsContainer);
if(v.getId() == R.id.makeLayoutButton){
//get form template which has an EditText of id "questionAnswerEt"
v1 = vi.inflate(R.layout.form_template, null);
//add it into my view
((LinearLayout) insertPoint).addView(v1);
v1.setId(formParentID);
//get edittext
questionAnswer = (EditText)v1.findViewById(R.id.questionAnswerET);
//set id
questionAnswer.setId(EditTextID);
EditTextID++;
}
Validation
if(v.getId() == R.id.bNext){
for(int x = 5000; x <= 5007; x++){
questionAnswer = (EditText)findViewById(x);
String questionAnswerValidator = (String) questionAnswer.getText().toString();
if(questionAnswerValidator.length() == 0){
((EditText) questionAnswer.findViewById(x))
.setError("Question Title is Required!");
}
}
}
Цикл начинается в 5000, потому что генерируемые EditTexts имеют установленные вручную идентификаторы, которые начинаются от 5000 и затем увеличивать каждый раз, когда пользователь решает другой EditText. Затем я получаю EditText, перебирая идентификаторы, ссылаясь на «questionAnswer». Затем я помещаю строковое значение questionAnswer (id of x) в строку «questionAnswerValidator». Затем проверяется, будет ли его пустым, и если он будет вызывать сообщение setError на соответствующих EditTexts, которые пусты. Проблема в том, что приложение сбой, когда начинается проверка, дает мне исключение с нулевым указателем. Любая подсказка относительно того, где я иду не так? Спасибо.
Вход:
08-27 14:27:02.084: W/dalvikvm(16285): threadid=1: thread exiting with uncaught exception (group=0x4166fe18)
08-27 14:27:02.084: E/AndroidRuntime(16285): FATAL EXCEPTION: main
08-27 14:27:02.084: E/AndroidRuntime(16285): Process: com.example.testing, PID: 16285
08-27 14:27:02.084: E/AndroidRuntime(16285): java.lang.NullPointerException
08-27 14:27:02.084: E/AndroidRuntime(16285): at com.example.testing.MakeQuestion.onClick(MakeQuestion.java:212)
08-27 14:27:02.084: E/AndroidRuntime(16285): at android.view.View.performClick(View.java:4480)
08-27 14:27:02.084: E/AndroidRuntime(16285): at android.view.View$PerformClick.run(View.java:18686)
08-27 14:27:02.084: E/AndroidRuntime(16285): at android.os.Handler.handleCallback(Handler.java:733)
08-27 14:27:02.084: E/AndroidRuntime(16285): at android.os.Handler.dispatchMessage(Handler.java:95)
08-27 14:27:02.084: E/AndroidRuntime(16285): at android.os.Looper.loop(Looper.java:157)
08-27 14:27:02.084: E/AndroidRuntime(16285): at android.app.ActivityThread.main(ActivityThread.java:5872)
08-27 14:27:02.084: E/AndroidRuntime(16285): at java.lang.reflect.Method.invokeNative(Native Method)
08-27 14:27:02.084: E/AndroidRuntime(16285): at java.lang.reflect.Method.invoke(Method.java:515)
08-27 14:27:02.084: E/AndroidRuntime(16285): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
08-27 14:27:02.084: E/AndroidRuntime(16285): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674)
08-27 14:27:02.084: E/AndroidRuntime(16285): at dalvik.system.NativeStart.main(Native Method)
@andruboy сделано. – Frisbetarian
также поместил код нажатия кнопки Я думаю, что вы не регистрируете кнопку onClickListener (это); – MilapTank
@andruboy Записывается нажатие кнопки. У меня есть проверка на статические поля EditText и его работоспособность, когда пользователь нажимает «bNext». Это когда я добавил подтверждение для динамических EditTexts, которые он начал сбой. – Frisbetarian