我在我的 Android 应用程序中使用自定义 ListView。问题是当我滚动 ListView 时,它会自动清除 EditText(Edittext 作为 list_item)中输入的数据,并刷新 ListView。我想阻止它停止清除 ListView Scroll 上输入的数据。请帮我..
问问题
2224 次
2 回答
1
1)定义自定义列表适配器
2)为每个项目定义一个对象,例如class MyClass { String myText}
3) 将每个项目的 EditText 的值存储在该对象中
我有一个用于存储 CheckBox 状态的代码。为 EditText 使用和定制它。
protected interface MyTextWatcher extends TextWatcher {
public void setEnabled(EditText editText, boolean enable);
public void setText(EditText editText, String text);
}
private MyTextWatcher generalTextWatcher = new MyTextWatcher() {
private boolean enabled_edtQty = true;
private boolean enabled_edtPackingQty = true;
public void setEnabled(EditText editText, boolean enable) {
if (editText.equals(edtQty))
{
this.enabled_edtQty = enable;
}
else if (editText.equals(edtPackingQty))
{
this.enabled_edtPackingQty = enable;
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if (this.enabled_edtQty && edtQty != null
&& edtQty.getText().hashCode() == s.hashCode())
{
edtQty_onTextChanged(s, start, before, count);
}
else if (this.enabled_edtPackingQty && edtPackingQty != null
&& edtPackingQty.getText().hashCode() == s.hashCode())
{
edtPackingQty_onTextChanged(s, start, before, count);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void setText(EditText editText, String text) {
this.setEnabled(editText, false);
editText.setText(text);
this.setEnabled(editText, true);
}
};
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView;
final MyClass item = getItem(position);
edtQty.addTextChangedListener(generalTextWatcher);
edtPackingQty.addTextChangedListener(generalTextWatcher);
generalTextWatcher.setText(edtQty, item.myText1);
generalTextWatcher.setText(edtPackingQty, item.myText2);
}
protected void edtQty_onTextChanged(CharSequence s, int start, int before,
int count) {
item.myText1 = s;
}
protected void edtPackingQty_onTextChanged(CharSequence s, int start, int before,
int count) {
item.myText2 = s;
}
在您的情况下,您应该使用addTextChangedListener
而不是setOnCheckedChangeListener
于 2013-01-05T08:15:06.750 回答
0
breceivemail 的回答是正确的,
您也可以尝试使用 ArrayList 存储数据 onTextChangeListener 可以在需要时存储数据,您可以在 listview 的适配器的 getView 中恢复数据
注意:如果您正在搜索停止列表视图在滚动时刷新,那么您将走错方向,因为我们无法阻止列表视图刷新其内容(因为所有屏幕外内容都转储到列表视图中),适配器被制成在 listview 需要时存储/提供数据(您不能依赖系统来保护/存储数据,您应该手动存储/恢复数据)。
于 2013-01-05T08:39:06.187 回答