获取ListView的item中的EditText的值

ListView的item中有EditText,当需要获得EditText中输入的值时,有时候会重复获取,有时候会发生错位的现象。现贴出适配器的代码,完整例子见附件。
public class MyAdapter extends BaseAdapter {
	
	private List<Entity> list;
	private LayoutInflater inflater;

	public MyAdapter(Context context, List<Entity> list) {
		this.list = list;
		inflater = LayoutInflater.from(context);
	}

	@Override
	public int getCount() {
		return list.size();
	}

	@Override
	public Object getItem(int position) {
		return list.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	@Override
	public View getView(final int position, View convertView, ViewGroup parent) {
		ViewHolder viewHolder;
		if (convertView == null) {
			convertView = inflater.inflate(R.layout.item, null);
			viewHolder = new ViewHolder();
			viewHolder.textView = (TextView) convertView.findViewById(R.id.txt_item);
			viewHolder.editText = (EditText) convertView.findViewById(R.id.edit_item);
			viewHolder.editText.setTag(position);
			viewHolder.editText.addTextChangedListener(new MyTextChangeListener(viewHolder));
			convertView.setTag(viewHolder);
		} else {
			viewHolder = (ViewHolder) convertView.getTag();
			viewHolder.editText.setTag(position);
		}
		Entity entity = list.get(position);
		viewHolder.editText.setText(entity.getContent());
		viewHolder.textView.setText(entity.getId());
		return convertView;
	}
	
	public class ViewHolder {
		TextView textView;
		EditText editText;
	}
	
	private class MyTextChangeListener implements TextWatcher {
		
		private ViewHolder holder;

		public MyTextChangeListener(ViewHolder holder) {
			this.holder = holder;
		}

		@Override
		public void afterTextChanged(Editable s) {
			int position = (Integer) holder.editText.getTag();
			Entity entity = list.get(position);
			entity.setContent(s.toString());
		}

		@Override
		public void beforeTextChanged(CharSequence s, int start, int count,
				int after) {
		}

		@Override
		public void onTextChanged(CharSequence s, int start, int before,
				int count) {
		}
	}
	
	public List<Entity> getData() {
		return list;
	}

}

猜你喜欢

转载自hu555u.iteye.com/blog/1969678