在onBindViewHolder之后,recycleview按钮状态改变



我有一个Recyclerview,在viewholder构造函数中有一个按钮onclicklistener:

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

它工作没有问题。有人知道为什么会这样吗?我怎么还能得到动画而不需要记住所有的状态?

当您调用adapter.notifyItemChanged(items.indexOf(item));时,它会为该位置重新绑定视图,这是存储在ViewHolder &不要有压力状态& &;这就是为什么它失去了按钮状态。

您可以通过使用OnTouchListener和存储状态来做到这一点,正如您在问题中提到的。

我是作为回复写的,因为我没有评论的声誉。

相关内容

  • 没有找到相关文章

最新更新