Android控件ListView获取item中EditText值

Posted 台风中的橘子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android控件ListView获取item中EditText值相关的知识,希望对你有一定的参考价值。

可以明确,现在没有直接方法可以获得ListView中每一行EditText的值.

    解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值.

    大概算法:重写BaseAdapter.getView函数,用一个数组存储EditText中的值,根据position即数组下标,在getView中动态更新EditText和动态获取EditText中的值.因为ListView中的item是复用的,如果不动态清空或动态获取EditText中值,就会出现数据紊乱,或者没数据.那么在生成EditText的时候要监控其值的变化.存储下来.

    代码:

[java]  view plain  copy
  1. package com.exmyth.android;  
  2.   
  3. public class ListEditorAdapter extends BaseAdapter   
  4.     private LayoutInflater mInflater;  
  5.     private List<Map<String, Object>> mData;// 存储的EditText值  
  6.     public Map<String, String> editorValue = new HashMap<String, String>();//  
  7.   
  8.     public ListEditorAdapter(Context context, List<Map<String, Object>> data)   
  9.         mData = data;  
  10.         mInflater = LayoutInflater.from(context);  
  11.         init();  
  12.       
  13.   
  14.     // 初始化  
  15.     private void init()   
  16.         editorValue.clear();  
  17.       
  18.   
  19.     @Override  
  20.     public int getCount()   
  21.         return mData.size();  
  22.       
  23.   
  24.     @Override  
  25.     public Object getItem(int position)   
  26.         return null;  
  27.       
  28.   
  29.     @Override  
  30.     public long getItemId(int position)   
  31.         return 0;  
  32.       
  33.   
  34.     private Integer index = -1;  
  35.   
  36.     @Override  
  37.     public View getView(int position, View convertView, ViewGroup parent)   
  38.         ViewHolder holder = null;  
  39.         // convertView为null的时候初始化convertView。  
  40.         if (convertView == null)   
  41.             holder = new ViewHolder();  
  42.             convertView = mInflater.inflate(R.layout.listview_item, null);  
  43.             holder.name = (TextView) convertView  
  44.                     .findViewById(R.id.list_item_name);  
  45.             holder.title = (TextView) convertView  
  46.                     .findViewById(R.id.list_item_title);  
  47.             holder.value = (EditText) convertView  
  48.                     .findViewById(R.id.list_item_inputvalue);  
  49.             holder.value.setTag(position);  
  50.             holder.userkey = (TextView) convertView.findViewById(R.id.user_key);  
  51.             holder.value.setOnTouchListener(new OnTouchListener()   
  52.                 @Override  
  53.                 public boolean onTouch(View v, MotionEvent event)   
  54.                     if (event.getAction() == MotionEvent.ACTION_UP)   
  55.                         index = (Integer) v.getTag();  
  56.                       
  57.                     return false;  
  58.                   
  59.             );  
  60.             class MyTextWatcher implements TextWatcher   
  61.                 public MyTextWatcher(ViewHolder holder)   
  62.                     mHolder = holder;  
  63.                   
  64.   
  65.                 private ViewHolder mHolder;  
  66.   
  67.                 @Override  
  68.                 public void onTextChanged(CharSequence s, int start,  
  69.                         int before, int count)   
  70.                   
  71.   
  72.                 @Override  
  73.                 public void beforeTextChanged(CharSequence s, int start,  
  74.                         int count, int after)   
  75.                   
  76.   
  77.                 @Override  
  78.                 public void afterTextChanged(Editable s)   
  79.                     if (s != null && !"".equals(s.toString()))   
  80.                         int position = (Integer) mHolder.value.getTag();  
  81.                         mData.get(position).put("list_item_inputvalue",  
  82.                                 s.toString());// 当EditText数据发生改变的时候存到data变量中  
  83.                       
  84.                   
  85.               
  86.             holder.value.addTextChangedListener(new MyTextWatcher(holder));  
  87.             convertView.setTag(holder);  
  88.          else   
  89.             holder = (ViewHolder) convertView.getTag();  
  90.             holder.value.setTag(position);  
  91.           
  92.         Object value = mData.get(position).get("list_item_name");  
  93.         if (value != null)   
  94.             holder.name.setText((String) value);  
  95.           
  96.         value = mData.get(position).get("list_item_title");  
  97.         if (value != null)   
  98.             holder.title.setText(value.toString());  
  99.           
  100.         value = mData.get(position).get("user_key");  
  101.         if (value != null)   
  102.             holder.userkey.setText(value.toString());  
  103.          else   
  104.             holder.userkey.setText("-1");  
  105.           
  106.         value = mData.get(position).get("list_item_inputvalue");  
  107.         if (value != null && !"".equals(value))   
  108. Android控件ListView获取item中EditText值

    Android中listView中的button控件获取item的值

    android ListView显示多个类型item 和 item中控件抢夺焦点解决办法

    android ListView显示多个类型item 和 item中控件抢夺焦点解决办法

    我的Android进阶之旅------&gt;Android中ListView中嵌套(ListView)控件时item的点击事件不起作的问题解决方法

    Android ListView 获取Item的值和得到每一个Item的view对象以及得到他们所对应的控件值