更新时间: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;                 }             }); | 
