我有一个由 SimpleCursorAdapter 创建的 EditText 项目的长滚动列表,并预先填充了来自 SQLite 数据库的值。
我通过以下方式制作:
cursor = db.rawQuery("SELECT _id, criterion, localweight, globalweight FROM " + dbTableName + " ORDER BY criterion", null);
startManagingCursor(cursor);
mAdapter = new SimpleCursorAdapter(this, R.layout.weight_edit_items, cursor, new String[]{"criterion","localweight","globalweight"}, new int[]{R.id.criterion_edit, R.id.localweight_edit, R.id.globalweight_edit});
this.setListAdapter(mAdapter);
滚动列表有几个模拟器屏幕长。项目显示正常 - 滚动它们显示每个项目都有来自数据库的正确值。
我可以对任何 EditTexts 进行编辑更改,并且新文本被接受并显示在框中。
但是...如果我随后将列表滚动到足以将已编辑的项目从屏幕上移开,当我再次滚动查看它时,它的值已恢复到我进行更改之前的值,即我的编辑已丢失.
为了解决这个问题,我做了一个 getText 来查看在我完成编辑之后(以及在滚动之前)的 EditText 中的内容,并且 getText 返回原始文本,即使 EditText 正在显示我的新文本。似乎 EditText 只是表面上接受了我的编辑,并且它们没有绑定到 EditText,这意味着它们在滚动离开屏幕时会被丢弃。
谁能告诉我这里发生了什么以及我需要做什么来强制 EditText 保留其编辑?