有一个应用程序,我以编程方式创建LinearLayouts。 LinearLayouts略有不同,但它们都包含多个视图。其中一些具有带TextWatcher的EditText字段。创建这些视图时,我想在EditText字段中使用来自首选项的旧的存储值。
当我在TextWtacher之前使用.setText(old_value)时,EditText字段中的数据是正确的,但是永远不会调用依赖于TextWatcher函数的计算。 当我尝试在TextWtacher之后使用.setText(old_value)时,我得到一个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)之后;像这样? (当然有一些修改......)
linearLayout.addView(editText);
editText.setText(old_value);
答案 0 :(得分:0)
已解决:完全重构了代码并发现了一些错误,其中TextWatcher内部有一个引用尚未启动的textField。虽然我这么认为是
TextView textfield = new TextView(this);
在editText字段之前完成,并且textfield在editText字段之前添加到LinearLayout,如下所示:
linearLayout.addView(textfield);
很可能是新手错误......