Android控件ListView获取item中EditText值
能够明白,如今没有直接方法能够获得ListView中每一行EditText的值.
解决方式:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值.
大概算法:重写BaseAdapter.getView函数,用一个数组存储EditText中的值,依据position即数组下标,在getView中动态更新EditText和动态获取EditText中的值.由于ListView中的item是复用的,假设不动态清空或动态获取EditText中值,就会出现数据紊乱,或者没数据.那么在生成EditText的时候要监控其值的变化.存储下来.
代码:
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;
}
});
class MyTextWatcher implements TextWatcher {
public MyTextWatcher(ViewHolder holder) {
mHolder = holder;
} private ViewHolder mHolder; @Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
} @Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
} @Override
public void afterTextChanged(Editable s) {
if (s != null && !"".equals(s.toString())) {
int position = (Integer) mHolder.value.getTag();
mData.get(position).put("list_item_inputvalue",
s.toString());// 当EditText数据发生改变的时候存到data变量中
}
}
}
holder.value.addTextChangedListener(new MyTextWatcher(holder));
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
holder.value.setTag(position);
}
Object value = mData.get(position).get("list_item_name");
if (value != null) {
holder.name.setText((String) value);
}
value = mData.get(position).get("list_item_title");
if (value != null) {
holder.title.setText(value.toString());
}
value = mData.get(position).get("user_key");
if (value != null) {
holder.userkey.setText(value.toString());
} else {
holder.userkey.setText("-1");
}
value = mData.get(position).get("list_item_inputvalue");
if (value != null && !"".equals(value)) {
holder.value.setText(value.toString());
} else {
String key = mData.get(position).get("user_key").toString();
String inputValue = editorValue.get(key);
holder.value.setText(inputValue);
}
holder.value.clearFocus();
if (index != -1 && index == position) {
holder.value.requestFocus();
}
return convertView;
} public final class ViewHolder {
public TextView name;
public TextView title;
public EditText value;// ListView中的输入
public TextView userkey;// 用来定义的标志性主键,可不用关心
}
}
用法:
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值的更多相关文章
- 安卓Android控件ListView获取item中EditText值
可以明确,现在没有直接方法可以获得ListView中每一行EditText的值. 解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值. 大概算法:重写Ba ...
- [Android Pro] android控件ListView顶部或者底部也显示分割线
reference to : http://blog.csdn.net/lovexieyuan520/article/details/50846569 在默认的Android控件ListView在 ...
- 从外部访问 Template (模板)的控件、获取它的属性值
DataTemplate 和 ControlTemplate 两个类均派生自 FrameWorkTemplate类.这个类有个 FindName方法 供我们查询内部控件. ControlTempla ...
- mvc 用户控件 ascx 获取 View 页面的值
<%Html.RenderAction("AscxSideNav", "UI", new {itemName=ViewData["ItemNam ...
- android中与Adapter相关的控件----ListView
ListView讲解: 一.ListView这个控件是一个使用非常广泛的控件,值得深入的学习和研究.基本使用已经在Adapter中使用过了 二.常用的属性和方法 footerDividersEnabl ...
- Android控件RecyclerView与ListView的异同
在我的一篇介绍Android新控件RecyclerView的博客(Android L新控件RecyclerView简介)中,一个读者留言说RecyclerView跟ListView之间好像没有什么不同 ...
- 关于Android控件EditText的属性InputType的一些经验,java组合多个参数
关于Android控件EditText的属性InputType的一些经验 2013-11-14 15:08:02| 分类: 默认分类|举报|字号 订阅 1.InputType属性在代码中 ...
- 【Android】12.0 UI开发(三)——列表控件ListView的简单实现2
1.0 由于书上内容,已经和实际编程的兼容性已经不太友好,重写了项目,用于进一步学习列表控件ListView. 2.0 新建项目ListViewTest,其中文件目录如下: 3.0 ActivityC ...
- Android基础控件ListView基础操作
1.简介 基于Android基础控件ListView和自定义BaseAdapter适配器情况下,对ListView的数据删除和添加操作: public boolean add(E e) {//添加数据 ...
随机推荐
- 「Codeforces Round #441」 Classroom Watch
Discription Eighth-grader Vova is on duty today in the class. After classes, he went into the office ...
- iOS静态库打包
当了三年多程序员,第一次写随便,说来有些惭愧.想成为一个优秀的程序员,分析,思考,总结并且做记录是必不可少的,今天先从简单的命令总结记起.好了,废话不多说了,Let's start our games ...
- Apache压力(并发)测试工具ab的使用教程收集
说明:用ab的好处,在处理多并发的情况下不用自己写线程模拟.其实这个世界除了LoadRunner之外还是有很多方案可以选择的. 官网: http://httpd.apache.org/(Apache服 ...
- Ext JS 5 gpl版本 官方原版的下载方法
先进入官网: 然后在导航的Products中选择Sencha Ext JS,会看到以下页面: 这时候不要单击Download按钮,而是要单击导航中的DETAILS,页面切换后,就可在底部看到GPL版本 ...
- 自动生成logo的网址
1.https://www.logaster.com/logo/
- 面试题:如何在不使用临时变量temp的情况下交换两个整数的值?
利用一个小技巧,一个整数a在异或另一个整数b两次以后所得的值还是整数a. 具体的过程我们可以自己找两个整数以二进制的形式自己在纸上画一下他们的异或过程.(异或的运算符号为"^") ...
- 新人补钙系列教程之:3D理论 - 二进制空间分割(BSP)树
1. 什么是BSP树 BSP算法的初始数据是一个多边形集,BSP在预处理的时候先在多边形集中选取一个多边形作为支持平面,然后根据这个平面将集合划分成两个部分,每个部分是一个新的子节点,递归进行该过程, ...
- ieda常用快捷键
Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Shift+Click,可以关闭文件Ctrl+[ ...
- 【Hadoop】Hadoop MR Job工作流引擎
Apache Oozie 是用于 Hadoop 平台的一种工作流调度引擎.该框架(如图 1 所示)使用 Oozie 协调器促进了相互依赖的重复工作之间的协调,您可以使用预定的时间或数据可用性来触发 A ...
- 黑马程序猿——JAVA高新技术——反射
----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 一.对于反射的概念 对于JAVA反射机制是在执行状态中,对于随意一个类.都可以知道 ...