TextWatcher之后的setText以编程方式创建的EditText

时间:2013-12-16 14:44:15

标签: android android-layout android-edittext settext

有一个应用程序,我以编程方式创建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);

1 个答案:

答案 0 :(得分:0)

已解决:完全重构了代码并发现了一些错误,其中TextWatcher内部有一个引用尚未启动的textField。虽然我这么认为是

TextView textfield = new TextView(this);

在editText字段之前完成,并且textfield在editText字段之前添加到LinearLayout,如下所示:

linearLayout.addView(textfield);

很可能是新手错误......