项目中遇到一种情况,列表中每项item都有一个edittext,由于listview中对viewhoder复用,会造成显示错乱的问题。
解决思路:
1. edittext的tag记录对应position。
2.将输入内容存入数据源对应item。根据et的tag中的position判断应该存入第几条数据。
3.设置et中的文字
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.task_item_task_list1, null);
viewHolder = new ViewHolder();
viewHolder.etText = (EditText) convertView.findViewById(R.id.et_text);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
//很重要,存位置
viewHolder.etText.setTag(position);
viewholder.etText.clearFocus();
viewHolder.etText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
try {
//取位置
int posTag = (int) viewHolder.etText.getTag();
dataList.get(posTag).put("inputTextString",s.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
viewHolder.etText.setText(itemData.optString("inputTextString"));
}