更新时间:2016年10月31日17时23分 来源:传智播客Android培训学院 浏览次数:
解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值.
大概算法:重写BaseAdapter.getView函数,用一个数组存储EditText中的值,根据position即数组下标,在getView中动态更新EditText和动态获取EditText中的值.因为ListView中的item是复用的,如果不动态清空或动态获取EditText中值,就会出现数据紊乱,或者没数据.那么在生成EditText的时候要监控其值的变化.存储下来.
代码:
| 
	 1 
	2 
	3 
	4 
	5 
	6 
	7 
	8 
	9 
	10 
	11 
	12 
	13 
	14 
	15 
	16 
	17 
	18 
	19 
	20 
	21 
	22 
	23 
	24 
	25 
	26 
	27 
	28 
	29 
	30 
	31 
	32 
	33 
	34 
	35 
	36 
	37 
	38 
	39 
	40 
	41 
	42 
	43 
	44 
	45 
	46 
	47 
	48 
	49 
	50 
	51 
	52 
	53 
	54 
	55 
	56 
	57 
	58 
	59 
	60 
	
	 | 
	
	 package com.exmyth.android; 
	
	public class ListEditorAdapter extends BaseAdapter { 
	    private LayoutInflater mInflater; 
	    private List<map<string, object="">> mData;// 存储的EditText值 
	    public Map<string, string=""> editorValue = new HashMap<string, string="">();// 
	
	    public ListEditorAdapter(Context context, List<map<string, object="">> data) { 
	        mData = data; 
	        mInflater = LayoutInflater.from(context); 
	        init(); 
	    } 
	
	    // 初始化 
	    private void init() { 
	        editorValue.clear(); 
	    } 
	
	    @Override 
	    public int getCount() { 
	        return mData.size(); 
	    } 
	
	    @Override 
	    public Object getItem(int position) { 
	        return null; 
	    } 
	
	    @Override 
	    public long getItemId(int position) { 
	        return 0; 
	    } 
	
	    private Integer index = -1; 
	
	    @Override 
	    public View getView(int position, View convertView, ViewGroup parent) { 
	        ViewHolder holder = null; 
	        // convertView为null的时候初始化convertView。 
	        if (convertView == null) { 
	            holder = new ViewHolder(); 
	            convertView = mInflater.inflate(R.layout.listview_item, null); 
	            holder.name = (TextView) convertView 
	                    .findViewById(R.id.list_item_name); 
	            holder.title = (TextView) convertView 
	                    .findViewById(R.id.list_item_title); 
	            holder.value = (EditText) convertView 
	                    .findViewById(R.id.list_item_inputvalue); 
	            holder.value.setTag(position); 
	            holder.userkey = (TextView) convertView.findViewById(R.id.user_key); 
	            holder.value.setOnTouchListener(new OnTouchListener() { 
	                @Override 
	                public boolean onTouch(View v, MotionEvent event) { 
	                    if (event.getAction() == MotionEvent.ACTION_UP) { 
	                        index = (Integer) v.getTag(); 
	                    } 
	                    return false; 
	                } 
	            }); 
	 | 
	
