Android listview控件在滚动时丢失值

Android listview控件在滚动时丢失值,android,listview,adapter,Android,Listview,Adapter,当我稍微向下滚动listview并再次向上滚动时,已看不见的行将丢失值(edittext),请参见以下图像: [直接从htc m7智能手机拍摄的照片] 当我聚焦并显示键盘时,值会返回到它应该返回的状态 我不需要textwatcher,因为编辑的值来自我的静态数组 这是我的适配器: public class SearchableItemsAdapter extends BaseAdapter implements Filterable { ArrayList<MyInvoiceI

当我稍微向下滚动listview并再次向上滚动时,已看不见的行将丢失值(edittext),请参见以下图像: [直接从htc m7智能手机拍摄的照片]

当我聚焦并显示键盘时,值会返回到它应该返回的状态

我不需要textwatcher,因为编辑的值来自我的静态数组

这是我的适配器:

public class SearchableItemsAdapter extends BaseAdapter implements Filterable
{
    ArrayList<MyInvoiceItems> filteredData = new ArrayList<MyInvoiceItems>();
    MyInvoiceItems temp;
    private ItemFilter mFilter;
    private LayoutInflater mInflater;
    //
    public SearchableItemsAdapter(Context context, ArrayList<MyInvoiceItems> data) {
        filteredData = data;
        mInflater = LayoutInflater.from(context);
    }
    //
    public int getCount() {
        return  filteredData.size();
    }
    //
    public Object getItem(int position) {
        return filteredData.get(position);
    }
    //
    public long getItemId(int position) {
        return position;
    }
    //        
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolderItems itemsholder;            
        if(convertView==null)
        {
            convertView=mInflater.inflate(R.layout.lstcstmrinvoicepopupitems,parent,false);
            itemsholder=new ViewHolderItems();
            itemsholder.iTaken=(CheckBox) convertView.findViewById(R.id.inv_popupTaken);
            itemsholder.iName=(TextView) convertView.findViewById(R.id.inv_popupName);
            itemsholder.iQuan=(EditText) convertView.findViewById(R.id.inv_popupQuan);
            itemsholder.iPrice=(EditText) convertView.findViewById(R.id.inv_popupPrice);
            itemsholder.iTotal=(TextView) convertView.findViewById(R.id.inv_popupTotal);
            convertView.setTag(itemsholder);
        }
        else
        {
            itemsholder=(ViewHolderItems) convertView.getTag();
        }
        if(filteredData!=null) {                
            itemsholder.iTaken.setChecked(false);
            if (filteredData.get(position).getTaken() == 1)
                itemsholder.iTaken.setChecked(true);
            itemsholder.iName.setText(filteredData.get(position).getItem_desc());
            itemsholder.iQuan.setText(filteredData.get(position).getItem_num().toString());
            itemsholder.iPrice.setText(filteredData.get(position).getItem_cost().toString());
            itemsholder.iTotal.setText(filteredData.get(position).getAmountTotal());               
        }
        //---
        return convertView;
    }
    //
    public class ViewHolderItems {
        CheckBox iTaken;
        TextView iName;
        EditText iQuan;
        EditText iPrice;
        TextView iTotal;
    }      
}
公共类SearchableItemsAdapter扩展BaseAdapter实现Filterable
{
ArrayList Filteredata=新的ArrayList();
MyInvoiceItems温度;
私有项目过滤器;
私人停车场;
//
公共SearchableItemsAdapter(上下文、ArrayList数据){
filteredData=数据;
mInflater=LayoutInflater.from(上下文);
}
//
public int getCount(){
返回filteredData.size();
}
//
公共对象getItem(int位置){
返回filteredData.get(位置);
}
//
公共长getItemId(int位置){
返回位置;
}
//        
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
最终ViewHolderItemsHolder;
if(convertView==null)
{
convertView=mInflater.inflate(R.layout.lstcstmrinvoicepopupitems,父项,false);
itemsholder=newviewHolderItems();
itemsholder.iTaken=(复选框)convertView.findViewById(R.id.inv_poputaken);
itemsholder.iName=(TextView)convertView.findViewById(R.id.inv_popupName);
itemsholder.iQuan=(EditText)convertView.findViewById(R.id.inv_popupQuan);
itemsholder.iPrice=(EditText)convertView.findViewById(R.id.inv_popuprice);
itemsholder.iTotal=(TextView)convertView.findViewById(R.id.inv_popupttal);
setTag(itemsholder);
}
其他的
{
itemsholder=(ViewHolderItems)convertView.getTag();
}
如果(filteredData!=null){
itemsholder.iTaken.setChecked(false);
if(filteredData.get(position).getTaken()==1)
itemsholder.iTaken.setChecked(true);
itemsholder.iName.setText(filteredData.get(position.getItem_desc());
itemsholder.iQuan.setText(filteredData.get(position.getItem_num().toString());
itemsholder.iPrice.setText(filteredData.get(position.getItem_cost().toString());
itemsholder.iTotal.setText(filteredData.get(position.getAmountTotal());
}
//---
返回视图;
}
//
公共类ViewHolderItems{
伊塔肯;
TextView-iName;
编辑部;
编辑文本iPrice;
TextView iTotal;
}      
}

顺便说一句,有人知道为什么有两个闪烁的光标(在数字5前后的第二张图片上)?

经过两天的斗争,在互联网上搜索解决方案后,我认为我的代码有问题(可能是适配器)但实际上,这种行为的主要原因是.xml设计代表了我列表中的每一行,我为每个组件使用了一个表,在将其更改为RelativeLayout并将每个控件直接放在RelativeLayout上之后,我不相信.xml布局的设计会影响我的视图。但我从这个问题中学到了很多:——)