2015-03-25 3 views
1

В OnCreate() метод, я создаю TextEdit с тегом программным образом:прибудете вид тегов создан программно

EditText et = new EditText(getApplicationContext()); 
et.setTag(field.getFieldId()); 
et.setBackgroundResource(R.drawable.textbox); 
et.setTextColor(getResources().getColor(R.color.noir)); 

parentLayout.addView(et); 

В afterTextChanged() метод, я хочу, чтобы получить, что EditText тег, чтобы получить текст, введенный пользователем.

Я пробовал этот код, но я получаю NullPointerException:

EditText et = (EditText) parentLayout.findViewWithTag("4249"); 
String strValue = et.getText().toString(); 

Можете ли вы помочь мне, пожалуйста !!

Спасибо.

+1

показать 'logcat' и строку' NPE' заброшен – hrskrs

+0

На самом деле я понял, что parentLayout не является реальным родителем EditText, это linearLayout, созданный также программно, поэтому я отредактировал свой код так: LinearLayout layout = (LinearLayout) parentll.findViewWithTag (field.getFieldId()); \t \t \t \t EditText et = (EditText) layout.findViewWithTag (field.getFieldId()); \t \t \t \t String strValue = et.getText(). ToString(); И я получаю исключение NullPointer в этот момент: EditText et = (EditText) layout.findViewWithTag (field.getFieldId()); –

ответ

0

Ну, я нашел решение самостоятельно.

1) Создание EditText программно установить пользовательские TextWatcher и добавить к нему EditText:

EditText et = new EditText(getApplicationContext()); 
        et.setTag(field.getFieldId()); 
        et.setBackgroundResource(R.drawable.textbox); 
        et.setTextColor(getResources().getColor(R.color.noir)); 
et.addTextChangedListener(new CustomTextWatcher(et)); 

2) Создание пользовательского TextWatcher:

private class CustomTextWatcher implements TextWatcher{ 

      private EditText editText; 

      private MyTextWatcher(EditText editText) { 
      this.editText = editText; 
      } 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      // TODO Auto-generated method stub 

     } 
     @Override 
     public void onTextChanged(CharSequence s, int start, int before, 
       int count) { 
      // TODO Auto-generated method stub 

     } 
     @Override 
     public void afterTextChanged(Editable s) { 

      String strValue = this.editText.getText().toString(); 
      Log.d("afterTextChanged", strValue); 

     } 
    } 

Надеется, что поможет другим разработчикам.