在ListView中修改EditText的值
来源:互联网 发布:js 运行时未定义变量 编辑:程序博客网 时间:2024/06/05 03:37
http://www.lxway.com/500522011.htm
由于ViewHolder的复用机制,所有当ListView修改EditText的时候,会出现修改完后的值变唯有设定的值,解决问题的思路:
1.为我们的EditText设定一个标记。
holder.ActualNum.setTag(position); // 为输入框设定标签,防止修改时错乱
2.为EditText设定一个Touch事件监听,获取到对应的position
holder.ActualNum.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub if (event.getAction() == MotionEvent.ACTION_UP) { index = (Integer) v.getTag(); Log.i("0302", "onTouch"+index); } return false; } });3.对EditText的输入转态进行监听,编写一个类实现TextWatcher接口
class MyTextWatcher implements TextWatcher { private ViewHolder mHolder; public MyTextWatcher(ViewHolder holder) { Log.i("0302", "构造函数TextWatcher"); mHolder = holder; } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub if (s != null && !"".equals(s)) { int position = (Integer) mHolder.ActualNum.getTag(); Log.i("0302", "EditText的标记:" + position); mMaterialList.get(position).setActualNum(s.toString()); //获得以及标记的EditText的下标,并且改变其数据源的值 } } }
4.最后就是实现EditText的监听
holder.ActualNum.addTextChangedListener(new MyTextWatcher(holder));以上几个步骤可以实现ListView中修改EditText的值,Adapter的源码如下:
package com.infok.adapter;import java.util.List;import android.content.Context;import android.graphics.Color;import android.text.Editable;import android.text.TextWatcher;import android.util.Log;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.TextView;import com.example.vsee.R;import com.infok.custom_view.RoundButton;import com.infok.model.MaterialEntity;/ * @Title: ReceiveMaterialAdapter.java * @author FANG * @Description: 收货适配器 * @date 2015-2-28 下午2:03:36 */public class ReceiveMaterialAdapter extends BaseAdapter { private LayoutInflater inflater; private ViewHolder holder; private List<MaterialEntity> mMaterialList; public ReceiveMaterialAdapter(Context context, List<MaterialEntity> mMaterialList) { this.mMaterialList = mMaterialList; inflater = LayoutInflater.from(context); } @Override public int getCount() { // TODO Auto-generated method stub return mMaterialList.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return mMaterialList.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } private Integer index = -1; @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub if (convertView == null) { holder = new ViewHolder(); convertView = inflater.inflate(R.layout.listitem_receive_material, null); holder.mRoundButton = (RoundButton) convertView .findViewById(R.id.roundButton); holder.mMaterialNo = (TextView) convertView .findViewById(R.id.listitem_material_no); holder.purchaseNum = (TextView) convertView .findViewById(R.id.listitem_purchase_num); holder.ActualNum = (EditText) convertView .findViewById(R.id.listitem_actual_num); holder.ActualNum.setTag(position); // 为输入框设定标签,防止修改时错乱 holder.ActualNum.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub if (event.getAction() == MotionEvent.ACTION_UP) { index = (Integer) v.getTag(); Log.i("0302", "onTouch"+index); } return false; } }); class MyTextWatcher implements TextWatcher { private ViewHolder mHolder; public MyTextWatcher(ViewHolder holder) { Log.i("0302", "构造函数TextWatcher"); mHolder = holder; } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub if (s != null && !"".equals(s)) { int position = (Integer) mHolder.ActualNum.getTag(); Log.i("0302", "EditText的标记:" + position); mMaterialList.get(position).setActualNum(s.toString()); } } } holder.ActualNum.addTextChangedListener(new MyTextWatcher(holder)); holder.mLayout = (LinearLayout) convertView .findViewById(R.id.listitem_backround_linearlayout); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); holder.ActualNum.setTag(position); } if (position % 2 == 0) { // 偶数数的时候设置背景 holder.mLayout.setBackgroundResource(R.color.listitem2); } else { // 奇数的时候设置背景 holder.mLayout.setBackgroundResource(R.color.listitem1); //相邻的两条Item的背景颜色不同 } final MaterialEntity material = mMaterialList.get(position); holder.mMaterialNo.setText(material.getMaterialNo()); holder.purchaseNum.setText(material.getPurchaseNum()); holder.ActualNum.setText(material.getActualNum()); holder.mRoundButton.setButtonText(material.getColor()); holder.mRoundButton.setButtonBackground(Color.RED); return convertView; } private class ViewHolder { private RoundButton mRoundButton; private TextView mMaterialNo, purchaseNum; private EditText ActualNum; private LinearLayout mLayout; }}
0 0
- 在ListView中修改EditText的值
- 在ListView中修改EditText的值
- ListView修改item中EditText
- Edittext In Listview,当listview的item中有edittext时,怎么保存edittext的值?
- ListView中包含EditText,修改并保存EditText中内容的处理办法
- EditText在ListView中无法被选中的问题
- Android—在listview中edittext获取焦点的问题
- 在ListView中嵌套EditText,EditText内容过多需要滚动的问题
- 在edittext中输入内容,动态匹配更新 listview的数据(EditText中边输入,listView边更新)
- Android在Listview中使用EditText
- EditText点击在ListView中失去焦点
- 在ListView中EditText丢失光标问题
- 获取Listview中EditText的值简单的解决方法
- 读取xml文件让其信息在listView上显示,并且listView上的每一条都能修改(用EditText)
- Android - ListView自定义Adapter中获得EditText的值
- Android - ListView自定义Adapter中获得EditText的值
- Android - ListView自定义适配器Adapter中获得EditText的值
- 从listview动态添加行中获取edittext的值
- openjudge 弟弟的作业
- Hive与HBase实现数据互导
- HDU 2083 简易版之最短距离(快排)
- 算法系列(二)查找算法--基本查找和二分查找
- Linux 常用命令积累
- 在ListView中修改EditText的值
- 【一天一道LeetCode】#71. Simplify Path
- 算术表达式的计算(栈的应用)
- C语言学习入们到精通之学习笔记(二)
- 25分钟掌握Hive基本操作
- grub命令解析
- Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图
- 预留端口避免占用ip_local_reserved_ports
- Javascript基础1