滚动时ListView丢失格式

时间:2016-10-05 01:14:41

标签: android android-layout listview

我已经为ListView创建了一个适配器,如果它们具有我指定的值,我想以编程方式更改某些行的颜色。

下面的代码显示了如何实现。发生了两件奇怪的事情:

1)第一行应该画,但不是;

2)其他行(除了第一行)是丰富多彩的,但是当你执行滚动时它会丢失背景颜色。

public View getView (int position, View convertView, ViewGroup parent ) {
        convertView = (RelativeLayout) inflater.inflate( resource, null );
        Content Legend = getItem( position );

        TextView name = (TextView) convertView.findViewById(R.id.name);
        name.setText(Legend.getName());

        TextView value = (TextView) convertView.findViewById(R.id.value);

        if (Legend.getValue().equals("Color")){
            convertView.setBackgroundColor(Color.GRAY);
            Legend.setValue("");
        }*/
        value.setText(Legend.getValue());

        return convertView;
    }

2 个答案:

答案 0 :(得分:0)

listView中的视图将被重用,试着认为你将每个视图设置在一个地方。因此,您需要考虑所有情况,添加其他{}

if (Legend.getValue().equals("Color")){
        convertView.setBackgroundColor(Color.GRAY);
        Legend.setValue("");
    } else {
  //set background and other value if not equals "color"

}

答案 1 :(得分:0)

static class ViewHolderItem {
    TextView name, value;
public ViewHolderItem(View view) {
            name = (TextView) view.findViewById(R.id.name);
 value = (TextView) view.findViewById(R.id.value);
}


    @Override
    public View getView(final int position, View convertView, final ViewGroup parent) {

        ViewHolderItem holder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.xxx, parent, false);
            holder = new MyHolder(convertView);
            convertView.setTag(holder);
        } else {
            holder = (MyHolder) convertView.getTag();
        }
            Content Legend = getItem( position );
            holder.name.setText(Legend.getName());

 if (Legend.getValue().equals("Color")){
            convertView.setBackgroundColor(Color.GRAY);
            holder.value.setText("whatever you wanna show or keep it empty");
          //whatever you wanna do
        }
else{
holder.value.setText(Legend.getValue());
}