Android listview控件在滚动时会丢失值

时间:2015-03-07 13:25:15

标签: android listview adapter

当我稍微向下滚动列表视图并再次向上滚动时,已经超出视图的行会丢失值(edittext),请参阅下面的图像: [直接从htc m7智能手机拍摄的照片]

enter image description here

当我对焦并显示键盘时,值会恢复原样!

enter image description here

我不需要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;
    }      
}

顺便说一下,有人知道为什么有两个闪烁的游标(在第5个数字之前和之后的第二个图像)?

1 个答案:

答案 0 :(得分:0)

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