问题描述: 在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());