2016-11-14 56 views
0

后更改我有一个Recyclerview那里有一个按钮onclicklistener在viewholder构造:Recyclerview按钮状态onBindViewHolder

public ViewHolder(View itemView) 
{ 
    super(itemView); 
    ... 
    button.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      ... 
     } 
    } 
} 

每个项目也有一个倒计时,每一秒倒计时递减和项目的进度被更新以显示剩下的时间。通过所有的项目

countdownHandler.postDelayed(countdownRunnable, 1000); 

然后迭代,递减倒计时,并通知适配器: 定时器与一个可运行做

countdownRunnable = new Runnable() 
{ 
    @Override 
    public void run() 
    { 
     Iterator<Item> iterator = countdownTasks.iterator(); 
     while (iterator.hasNext()) 
     {  
      item.decrementCountdown(); 
      adapter.notifyItemChanged(items.indexOf(item)); 
     } 
     if (countdownTasks.size() > 0) 
      countdownHandler.postDelayed(countdownRunnable, 1000); 
    } 
} 

这里是我的问题,它也会发生,如果有只有一个项目在列表中。 我按下按钮并处于按下状态,但倒计时更新触发时,按钮不再按下。释放按钮不会按照它应该激活按钮。如果我删除倒计时,它会正常工作。

我不更改onBindViewHolder中的按钮,因为只有一个项目,所以我不滚动。这是预期的行为,只要notifyItemChanged被调用,或者我做错了什么,所有按钮按钮都会被取消?这甚至可以与onClickListener一起工作,还是需要onTouchListener,并将项目中的触地状态保存并每次更新都重置?

谢谢!

编辑: 我发现,如果我设置

recyclerView.setItemAnimator(null); 

它的工作原理没有问题。有没有人知道为什么会这样,以及如何在没有记住所有状态的麻烦的情况下仍然可以获得动画?

回答

0

当你调用adapter.notifyItemChanged(items.indexOf(item));它重新绑定那个位置,这是存储在ViewHolder &没有按下状态&这就是为什么它失去按钮状态的新鲜观点看法。

您可以通过使用OnTouchListener并存储您提到的问题来完成。

我正在写作,因为我没有评论的声誉。