我有一个Recyclerview,其中viewholder构造函数中有一个onclicklistener按钮:
public ViewHolder(View itemView)
{
super(itemView);
...
button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
...
}
}
}
每个项目也有倒计时,倒计时每秒递减一次,项目的进度条会更新以显示剩余时间。 计时器由runnable完成:
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 :(得分:0)
当您致电adapter.notifyItemChanged(items.indexOf(item));
时,它会重新绑定该位置的视图,这是ViewHolder
&amp;存储的新视图。没有紧迫的状态&amp;这就是它失去按钮状态的原因。
您可以使用OnTouchListener
并按照您提到的那样存储状态来执行此操作。
由于我没有评论的声誉,所以我正在写作评论。