2016-04-21 80 views
0

我改变了我的CustomAdapter中rowView的背景颜色,当我向下滚动列表并备份视图时刷新和背景消失,我知道这是因为listView的回收机制,但我不能让它停止。listView在滚动时回收视图

这是我的getView功能:

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     final Holder holder = new Holder(); 
     final View rowView; 
     rowView = inflater.inflate(R.layout.program_list, null); 
     holder.tv = (TextView) rowView.findViewById(R.id.textView1); 
     holder.img = (ImageView) rowView.findViewById(R.id.imageView1); 
     holder.tv.setText(result[position]); 
     holder.img.setImageResource(imageId[position]); 
     rowView.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (position != 0) 
        rowView.setBackgroundColor(Color.rgb(70, 190, 200)); 
      } 
     }); 
     return rowView; 
    } 

我想要做的是:阵列中的所有位置已经被按下内部存储,然后色大家他们的每一次。我看到很多其他解决方案,但我不完全了解它们。

回答

1

我认为你应该使用不同的方法,并在你点击的物品的位置存储某处。然后,当您创建视图检查位置是否存储并更改背景。 希望它可以帮助你

+0

好方法。谢谢:)我只是有问题。 – DAVIDBALAS1

0

做一个布尔数组,并设置为你点击的每个项目为真。

boolean[] isSelected; 

然后在你的getView方法代码中就像这样。

rowView.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (position != 0){ 
       rowView.setBackgroundColor(Color.rgb(70, 190, 200)); 
       isselected[position] = true;    } 
      } 
    }); 
if(isSelected[position]){ 
    rowView.setBackgroundColor(Color.rgb(70, 190, 200)); 
} 
+0

我认为你必须在开始时设置布尔数组长度,所以Set会更好。 – DAVIDBALAS1

+0

是@ DAVIDBALAS1 –