2016-11-14 135 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並存儲您提到的問題來完成。

我正在寫作,因爲我沒有評論的聲譽。