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

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

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

代码:

  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. holder.value.setText(value.toString());
  109. } else {
  110. String key = mData.get(position).get("user_key").toString();
  111. String inputValue = editorValue.get(key);
  112. holder.value.setText(inputValue);
  113. }
  114. holder.value.clearFocus();
  115. if (index != -1 && index == position) {
  116. holder.value.requestFocus();
  117. }
  118. return convertView;
  119. }
  120.  
  121. public final class ViewHolder {
  122. public TextView name;
  123. public TextView title;
  124. public EditText value;// ListView中的输入
  125. public TextView userkey;// 用来定义的标志性主键,可不用关心
  126. }
  127. }

使用方法:

private List<Map<String, Object>> mCheckItemList = new ArrayList<Map<String, Object>>();

mAdapter = new ListEditorAdapter(this, mCheckItemList);

m_lvListView.setAdapter(mAdapter);

直接改变mCheckItemList中的数据,然后调用mAdapter.notifyDataSetChanged();就可以更新ListView的数据

当然,直接从mCheckItemList也可以获得用户在EditText中输入的数据.比较方便

其他:

ListView list= (ListView)findViewById(R.id.list);//获得listview

for (int i = 0; i < list.getChildCount(); i++) {
     LinearLayout layout = (LinearLayout)list.getChildAt(i);// 获得子item的layout
     EditText et = (EditText) layout.findViewById(R.id.et);// 从layout中获得控件,根据其id
// EditText et = (EditText) layout.getChildAt(1)//或者根据位置,在这我假设TextView在前,EditText在后
     
     System.out.println("the text of "+i+"'s EditText:----------->"+et.getText());
}

安卓Android控件ListView获取item中EditText值的更多相关文章

  1. Android控件ListView获取item中EditText值

    能够明白,如今没有直接方法能够获得ListView中每一行EditText的值. 解决方式:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值. 大概算法:重写Ba ...

  2. [Android Pro] android控件ListView顶部或者底部也显示分割线

    reference to  :  http://blog.csdn.net/lovexieyuan520/article/details/50846569 在默认的Android控件ListView在 ...

  3. 从外部访问 Template (模板)的控件、获取它的属性值

    DataTemplate 和 ControlTemplate 两个类均派生自 FrameWorkTemplate类.这个类有个 FindName方法 供我们查询内部控件.  ControlTempla ...

  4. mvc 用户控件 ascx 获取 View 页面的值

    <%Html.RenderAction("AscxSideNav", "UI", new {itemName=ViewData["ItemNam ...

  5. android中与Adapter相关的控件----ListView

    ListView讲解: 一.ListView这个控件是一个使用非常广泛的控件,值得深入的学习和研究.基本使用已经在Adapter中使用过了 二.常用的属性和方法 footerDividersEnabl ...

  6. Android控件RecyclerView与ListView的异同

    在我的一篇介绍Android新控件RecyclerView的博客(Android L新控件RecyclerView简介)中,一个读者留言说RecyclerView跟ListView之间好像没有什么不同 ...

  7. 【Android】12.0 UI开发(三)——列表控件ListView的简单实现2

    1.0 由于书上内容,已经和实际编程的兼容性已经不太友好,重写了项目,用于进一步学习列表控件ListView. 2.0 新建项目ListViewTest,其中文件目录如下: 3.0 ActivityC ...

  8. Android基础控件ListView基础操作

    1.简介 基于Android基础控件ListView和自定义BaseAdapter适配器情况下,对ListView的数据删除和添加操作: public boolean add(E e) {//添加数据 ...

  9. Robotium之Android控件定位实践和建议(Appium/UIAutomator姊妹篇)

    本人之前以前撰文描写叙述Appium和UIAutomator框架是怎样定位Android界面上的控件的. UIAutomator定位Android控件的方法实践和建议 Appium基于安卓的各种Fin ...

随机推荐

  1. unite

    列出某个集合里的项目,比如file,buffer等 :United file——列出文件 :United buffer——列出buffer :United file_rec——递归列出文件 进入Uni ...

  2. 【POJ】3415 Common Substrings

    后缀数组可解.使用单调栈优化. /* 3415 */ #include <iostream> #include <sstream> #include <string> ...

  3. poj1195Mobile phones(二维树状数组)

    http://poj.org/problem?id=1195 模版题 i写成k了 找了一个多小时没找出来.. #include <iostream> #include<cstring ...

  4. poj3265

    考状态的dp 我的方法可能比较奇怪 设f[i,j]表示第i个月解决j个问题可以最多解决到第几个问题 容易知道,答案(月份)不会超过2n+1: f[i,j]=max(f[i-1,k]+j) 复杂度为O( ...

  5. 【 D3.js 高级系列 — 5.1 】 颜色插值和线性渐变

    颜色插值指的是给出两个 RGB 颜色值,两个颜色之间的值通过插值函数计算得到.线性渐变是添加到 SVG 图形上的过滤器,只需给出两端的颜色值即可. 1. 颜色插值 在[高级 - 第 5.0 章]里已经 ...

  6. 自杀程序&递归删除目录

    自杀程序,删掉自身,包括执行程序所在的文件夹. 仅在windows下进行了测试,使用语言C# string fileName = Path.GetTempPath() + "killmyse ...

  7. SQL注入攻击的种类和防范手段

    观察近来的一些安全事件及其后果,安全专家们已经得到一个结论,这些威胁主要是通过SQL注入造成的.虽然前面有许多文章讨论了SQL注入,但今天所讨论的内容也许可帮助你检查自己的服务器,并采取相应防范措施. ...

  8. HDU 1024 Max Sum Plus Plus 简单DP

    这题的意思就是取m个连续的区间,使它们的和最大,下面就是建立状态转移方程 dp[i][j]表示已经有 i 个区间,最后一个区间的末尾是a[j] 那么dp[i][j]=max(dp[i][j-1]+a[ ...

  9. codeforces 629D 树状数组+LIS

    题意:n个圆柱形蛋糕,给你半径 r 和高度 h,一个蛋糕只能放在一个体积比它小而且序号小于它的蛋糕上面,问你这样形成的上升序列中,体积和最大是多少 分析:根据他们的体积进行离散化,然后建树状数组,按照 ...

  10. ZOJ 3469 Food Delivery 区间DP

    这道题我不会,看了网上的题解才会的,涨了姿势,现阶段还是感觉区间DP比较难,主要是太弱...QAQ 思路中其实有贪心的意思,n个住户加一个商店,分布在一维直线上,应该是从商店开始,先向两边距离近的送, ...