如何在列表视图的行视图动态更改时使用holder类

时间:2014-07-31 14:19:41

标签: android listview scroll

我有一个列表视图,当你按下它时会改变颜色,同时计时器开始滴答。

enter image description here

如果您在列表视图中按一行,则会更改为:

enter image description here

我有一个onItemClickListener附加到列表视图。我用持有人类回收我的行视图。

问题是,当我按下一行并在列表视图中进一步滚动某处时,突然另一行视图也改变颜色并开始计数。我知道这是因为意见得到回收。但是我不知道如何为背景颜色和计时器(在单独的线程中运行)解决这个问题

这是我的适配器的getView:

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

    ViewHolderItem viewHolder = null;
    TextView txtTitle = null;
    TextView timer = null;
        if(view == null){

            inflater = context.getLayoutInflater();
            view = inflater.inflate(R.layout.list_single, parent, false);
            txtTitle = (TextView) view.findViewById(R.id.txt);
            timer = (TextView) view.findViewById(R.id.timer);

            viewHolder = new ViewHolderItem();
            viewHolder.textViewTimer = timer;
            viewHolder.textViewOrderNo = txtTitle;
            viewHolder.view = view;
            view.setTag(viewHolder);
        }
        else{
            viewHolder = (ViewHolderItem) view.getTag();
            }

    viewHolder.textViewOrderNo.setText(web[position]);

    return view;
}

2 个答案:

答案 0 :(得分:0)

您必须设置FlagOnclick更改该标记,以便每次都可以检查并更改GetView()中针对该特定位置的BackGround

if(checkcondition){
//change color
}else{
//change color
}

希望对你有帮助..

答案 1 :(得分:0)

存储每一行​​的状态,并根据需要更改getView()..类似于:

  
    

if(state == counting){
                     viewHolder.textViewOrderNo.setBackgroundColour(colorCounting);                      viewHolder.textViewOrderNo.setCount(计数); }

  

您还必须与计数器通信以获取计时器状态..