安卓Android控件ListView获取item中EditText值
来源:互联网 发布:华润置地 知乎 编辑:程序博客网 时间:2024/05/21 22:39
解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值.
大概算法:重写BaseAdapter.getView函数,用一个数组存储EditText中的值,根据position即数组下标,在getView中动态更新EditText和动态获取EditText中的值.因为ListView中的item是复用的,如果不动态清空或动态获取EditText中值,就会出现数据紊乱,或者没数据.那么在生成EditText的时候要监控其值的变化.存储下来.
代码:
public class ListEditorAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private List
public ListEditorAdapter(Context context, List
// 初始化
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
mAdapter = new ListEditorAdapter(this, mCheckItemList);
m_lvListView.setAdapter(mAdapter);
直接改变mCheckItemList中的数据,然后调用mAdapter.notifyDataSetChanged();就可以更新ListView的数据
当然,直接从mCheckItemList也可以获得用户在EditText中输入的数据.比较方便
- 安卓Android控件ListView获取item中EditText值
- 安卓Android控件ListView获取item中EditText值
- 安卓Android控件ListView获取item中EditText值
- 安卓Android控件ListView获取item中EditText值
- 安卓Android控件ListView获取item中EditText值
- 安卓Android控件ListView获取item中EditText值
- Android控件ListView获取item中EditText值
- Android控件ListView获取item中EditText值
- Android控件ListView获取item中EditText值
- Android控件ListView获取item中EditText值
- Android控件ListView获取item中EditText值
- 安卓ListView的item中含有EditText,动态添加item时EditText值的保存
- Android ListView的Item中含有EditText,获取EditText里面的值并且刷新ListView值不改变
- Android ListView的Item中含有EditText,获取EditText里面的值并且刷新ListView值不改变
- Android ListView的Item中含有EditText,获取EditText里面的值并且刷新ListView值不改变
- Android ListView的Item中含有EditText,获取EditText里面的值并且刷新ListView值不改变
- 安卓Android控件ListView嵌套EditText控件
- 安卓ListView的Item中含有EditText,EditText里面的值保存,并且滑动ListView时EditText值不改变
- Hdu--1710--Binary Tree Traversals
- RobotFrameWork(二)Ride简单使用及快捷键
- 座右铭
- 异常-配置数据库错误
- 获取对象的属性列表
- 安卓Android控件ListView获取item中EditText值
- 【转载+原创】curl_multi_init 简单并发下载图片问题
- 原生程序初次逆向之ARM与X86相关知识对比
- PMON代码分析备忘
- ListView 的属性设置详解
- Function
- [MFC]调用控制台打印
- 第2.2节 android中res目录下资源的分布
- java中监控在线用户