问题描述:
在ListView中包含EditText组件,当下拉ListView的时候,容易出现一个情况,就是EditText中的值会消失。
我目前也不知道是什么原因导致这种事情的发生。
解决办法:
if (map.get("grade") != null && !map.get("grade").toString().equals("0")) {
edit.setText((String)map.get("grade").toString());
}
// 文本改变监听器
edit.addTextChangedListener(new TextWatcher(){
int l = 0;//记录字符串被删除字符之前,字符串的长度
int location = 0;//记录光标的位置
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
l = s.length();
location = edit.getSelectionStart();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
Pattern p = Pattern.compile("^(100|[1-9]\\d|\\d)$");
Matcher m = p.matcher(s.toString());
if(m.find() || ("").equals(s.toString())){
System.out.print("OK!");
}else{
System.out.print("False!");
Toast.makeText(context, "请输入正确的数值", Toast.LENGTH_SHORT).show();
}
// list.add(position)
((Map<String,Object>)list.get(position)).put("grade", s.toString());
}
@Override
public void afterTextChanged(Editable s) {
appContext.mGradeStr.put((String)map.get("id"), s.toString());
}});
上面代码,其实思路很简单,一个就是把值存到List中,二个就是取出List中的值。
从List中取出来的主要代码是:
if (map.get("grade") != null && !map.get("grade").toString().equals("0")) {
edit.setText((String)map.get("grade").toString());
}
放到List中:
((Map<String,Object>)list.get(position)).put("grade", s.toString());