listView滚动时回收视图

时间:2016-04-21 12:09:21

标签: android

我在CustomAdapter中更改rowView的背景颜色,当我向下滚动列表并备份视图得到刷新并且背景消失时,我知道这是因为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;
    }

我想要做的是:在已经按下的所有位置存储在数组中,然后每次都为每个人着色。我看到了很多其他解决方案,但我并不完全理解它们。

2 个答案:

答案 0 :(得分:1)

我认为你应该使用不同的方法并存储你点击的项目的位置。然后,当您创建视图时,检查位置是否已存储并更改背景。 希望它能帮到你

答案 1 :(得分:0)

改为创建一个布尔数组,并为您单击的每个项设置true。

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)); 
}