请问各位,我有一个listview每一行都是由一个textview和editview组成的(比如共有16行)
当行数很多的时候出现了滚动条我重写了BaseAdapter代码如下
public class MyAdapter extends BaseAdapter
{
private LayoutInflater mInflater; public MyAdapter(Context context)
{
this.mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return item.size();
} @Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
} @Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
} @Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder = null;
if (convertView == null)
{
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.list_view, null);
holder.Trmtype = (TextView)convertView.findViewById(R.id.Trm_type);
holder.Ermqty = (EditText)convertView.findViewById(R.id.Erm_qty);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder)convertView.getTag();
}
holder.Trmtype.setText((String)item.get(position).get("Trm_type"));
holder.Ermqty.setText((String)item.get(position).get("Erm_qty"));
holder.Ermqty.addTextChangedListener(new TextWatcher()
{ public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
} public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
// TODO Auto-generated method stub
edit.setText(Integer.toString(position) + ":" + s.toString());
} public void onTextChanged(CharSequence s, int start,
int before, int count) {
}
});
return convertView;
}
}
我给EditText写了TextChanged事件,可是为什么我在上下滑动的时候,没有改过EditText里面的值也触发了这个事件?
当行数很多的时候出现了滚动条我重写了BaseAdapter代码如下
public class MyAdapter extends BaseAdapter
{
private LayoutInflater mInflater; public MyAdapter(Context context)
{
this.mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return item.size();
} @Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
} @Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
} @Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder = null;
if (convertView == null)
{
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.list_view, null);
holder.Trmtype = (TextView)convertView.findViewById(R.id.Trm_type);
holder.Ermqty = (EditText)convertView.findViewById(R.id.Erm_qty);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder)convertView.getTag();
}
holder.Trmtype.setText((String)item.get(position).get("Trm_type"));
holder.Ermqty.setText((String)item.get(position).get("Erm_qty"));
holder.Ermqty.addTextChangedListener(new TextWatcher()
{ public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
} public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
// TODO Auto-generated method stub
edit.setText(Integer.toString(position) + ":" + s.toString());
} public void onTextChanged(CharSequence s, int start,
int before, int count) {
}
});
return convertView;
}
}
我给EditText写了TextChanged事件,可是为什么我在上下滑动的时候,没有改过EditText里面的值也触发了这个事件?
解决方案 »
- android json 问题 关于数据覆盖
- 请懂android的专家帮忙指导一下,谢谢!
- xml中可以引用另外的xml吗?
- ListView 显示问题
- TextView显示问题
- Android BroadcastReceiver
- Android4.2 把资源文件放到src目录下面
- 在XML布局中用dip为单位设置了某个控件的宽度和高度, 但用java代码生成控件时单位只有int,怎么办?
- eclipse下android-sdk没有samples例程!在什么地方呢?
- [紧急求助]android背景颜色不起作用
- 怎样把java应用 变为一个apk
- 如何把GUID放入一个16位的二进制上。又如何读取一个16位的二进制回GUID
listview是显示item里的数据
本来我是打算用EditView的onTextChanged事件中也同时还去修改我的item的值
可是现在他在回收垃圾的时候也会触发这个事件,那应该用什么方法去处理?
我是在一个listview中每一行都放了一个textview和EditText, 然后textview和edittext上都是有内容的 当listview出现了滚动条后 如果某个edittext被滚动到看不见的位置 再滚回来时 它里面填的内容就没有了 , 这个应该是因为垃圾回收的问题, 所以我就用一个ArrayList先来存放数据 然后重写baseadapter的getView
这样这个问题是解决了
但是 第二个问题 我如果修改了EditText的值 他滚动回来后会根据ArrayList中的值还原成没有修改之前的值, 请问这个怎么处理?
其实记录修改的值什么的都没什么问题。
现在的问题主要是因为垃圾回收的时候也会触发onTextChanged, 在TextView中更改值也会触发
我就没办法区分究竟哪个才是在修改,哪个是在回收
比如我listview有8个item UI上只显示3个, 当你手指点住listview往上滑动,让第4个item出现,第一个item消失他就会触发ontextchanged事件了,可是如果我这个时候记录就变成了是第一个item在修改
item1 中EditText的值是 "111"
item2 中EditText的值是 "222"
item3 中EditText的值是 "333"
根据listView的原理
在滑动listveiw让item1消失,item4出现的时候listview其实是不会去生成一个item4,而是变成
item2 -> "222"
item3 -> "333"
item1 -> "444"
那这个时候他就触发了ontextchanged,因为原来的item1中EditText的值是111而现在变成了444,在发生变化的时候position是1, 如果这个是后我去修改了, 那我的list里就把第一个值修改成了444,这个其实是错的