我有一个列表视图,并且我的代码中有备用的行颜色更改。当我的清单很小时,它可以正常工作。当列表大小增加并且由于视图重新整理而使其折叠时,该如何解决? 下面是我的代码:
@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;
}
答案 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;
}
希望这会有所帮助。 快乐编码