如何将EditText的更改存储在ListView的项目中?

时间:2013-02-12 08:06:22

标签: android listview android-edittext adapter textwatcher

我有一个带有自定义适配器的ListView。每行都有一个EditText。每个EditText都有一个与该行相关的初始值,用户可以使用EditTexts更改此值。

我想存储这些更改的值。我为每个TextWatcher定义了EditText,但它无法正常工作,尤其是在滚动或过滤数据时。

我该怎么做?

我使用合适的方法吗?

1 个答案:

答案 0 :(得分:0)

问题出在TextWatcher上。我使用OnKeyListener解决了它:

private boolean programmaticalTextChange = false;

private KeyEvent UnknownKey = new KeyEvent(KeyEvent.ACTION_DOWN,
            KeyEvent.KEYCODE_UNKNOWN);

    public class MyTextWatcher implements TextWatcher
    {
        private EditText editText;

        public MyTextWatcher(EditText editText)
        {
            this.editText = editText;
        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }

        @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) {
            if (!programmaticalTextChange)
                editText.dispatchKeyEvent(UnknownKey);
        }
    }


@Override
public View getView(final int position, View convertView, ViewGroup parent) {
       //...
       myEditText.setOnKeyListener(new OnKeyListener() {

            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                updateItem(item, v, rowView);
                return false;
            }
        });
        myEditText.addTextChangedListener(new MyTextWatcher(myEditText));

}

protected void updateItem(MyClass item, View v) {
        try {
            item.Qty = Double.valueOf(((EditText) v).getText()
                    .toString());
        } catch (Exception e) {

        }
    }