У меня есть приложение, в котором я программно создаю LinearLayouts. LinearLayouts отличаются немного, но все они содержат несколько видов. Некоторые из них имеют поле EditText с TextWatcher. Когда эти представления создаются, я хочу использовать старое, сохраненное значение из настроек в поле EditText.setText после TextWatcher для программно созданного EditText
Когда я использую .setText (old_value) перед TextWtacher, данные в поле EditText верны, но календарное закрытие функции TextWatcher никогда не вызывается. Когда я пытаюсь использовать .setText (old_value) после TextWtacher, я получаю исключение NullPointerException.
Ниже короткий пример кода ...
(LinearLayout) linearLayout = new LinearLayout();
linearLayout.setId(ll_counter++);
while (have more rows to process) {
BUTTON-VIEW-code;
linearLayout.addView();
TEXT-VIEW-code
linearLayout.addView(TEXT-VIEW);
editText = new EditText(this);
editText.setId(et_counter++);
editText.setTag("SomeTag");
editText.setText(old_value); // Works, but no calculations
editText.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
// do calculations and update add_text-field.
}
public void beforeTextChanged(Editable s) {
// nothing here
}
public void onTextChanged(Editable s) {
// nothing here
}
});
editText.setText(old_value); // Doesn't Works, NULL PONTER EXCEPTION
linearLayout.addView(editText);
}
Если editText.setText придет после linearLayout.addView (EditText); как это? (С некоторым modifcations конечно ...)
linearLayout.addView(editText);
editText.setText(old_value);
Не уверен, что создание «TextWatcher» внутри цикла while - лучшая ставка. Помните, что наблюдатель текста всегда будет для вас, если вы не избавитесь от него самостоятельно. У вас могут быть проблемы, потому что вы продолжаете создавать новые TextWatchers, когда действительно хотите только одного. –
editText.setId (et_counter ++); && linearLayout.setId (ll_counter ++); выглядят немного рискованно, в зависимости от значений по умолчанию et_counter и ll_counter. Также, как упоминалось в @ pasta12, добавление TextWatcher внутри цикла не имеет большого смысла. Основываясь на вашей логике, кажется, вам нужен только один TextWatcher, где при создании мультипликаторов. –
Pasta12, я посмотрю на это. Потому что, как вы говорите, мне нужен только один TextWtacher. И @Gaurav Arora, у меня есть более надежные идентификаторы, чем созданные в этом примере ... Но thanx как для ответа – user1086500