当视图回收发生时,ListView备用行颜色失败

时间:2019-08-22 10:04:01

标签: android listview

我有一个列表视图,并且我的代码中有备用的行颜色更改。当我的清单很小时,它可以正常工作。当列表大小增加并且由于视图重新整理而使其折叠时,该如何解决? 下面是我的代码:

   @Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = null;
    if (convertView == null) {
        LayoutInflater inflator = context.getLayoutInflater();
        view = inflator.inflate(R.layout.adapter_solist, null);
        if ( position % 2 == 1) {
            view.setBackgroundColor(Color.parseColor("#add8e6"));
        } else {
            view.setBackgroundColor(Color.parseColor("#b0c4de"));
        }

        dbHelper.openReadableDatabase();
        sotran = dbHelper.getUdatedSOLineItem(strFlag);
        dbHelper.closeDatabase();
        if(sotran.size()!=0){
        for(int i=0;i<sotran.size();i++){
            int pos = Integer.parseInt(sotran.get(i).getRowid())-1;
            if(position==pos){
                view.setBackgroundColor(Color.parseColor("#00FF00"));
            }
        }
        }



        final ViewHolder viewHolder = new ViewHolder();
        viewHolder.itmNum = (TextView) view
                .findViewById(R.id.tvItem);
        viewHolder.itmDesc = (TextView) view
                .findViewById(R.id.tvDesc);
        viewHolder.itmQty = (TextView) view
                .findViewById(R.id.tvQty);
        view.setTag(viewHolder);
    } else {
        view = convertView;

    }

    ViewHolder holder = (ViewHolder) view.getTag();

    holder.itmNum.setText(list.get(position).getItem());
    holder.itmDesc.setText(list.get(position).getDescrip());
    holder.itmQty.setText(list.get(position).getQtyord());

    return view;
}

2 个答案:

答案 0 :(得分:1)

您正在使用此代码

{{1}}

仅在convertView == null的情况下才有条件,我认为您在convertView!= null时也应在其他部分添加上述代码

答案 1 :(得分:0)

使用setId获得期望的结果-

您需要这样做,首先为您的视图设置标签,例如 convertView.setId(position),然后将所有内容与

进行比较
if (containerView.getId() % 2 == 1) {
 view.setBackgroundColor(Color.parseColor("#add8e6"));
} else {
 view.setBackgroundColor(Color.parseColor("#b0c4de"));
}

如果这对您不起作用,则可能是因为当您上下滚动时,您在视图中已经设置的位置会再次调用,因此不会产生期望的结果。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = null;

    if(convertView == null){
        LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View row1=inflater.inflate(R.layout.mylist_rows, parent, false);
    } else {
        view = convertView;
    }

    return view;
} 

希望这会有所帮助。 快乐编码