2017-07-20 28 views
1

所以基本上,我有一個recyclerview有一個級別的列表。但本質上,我想某些項目有一個黑色的背景表明,他們還沒有鎖定(有點像視頻遊戲)如何更改某些物品在回收站內的視圖背景?

我目前的方法:

@Override 
    public void onBindViewHolder(BracketsAdapter.ViewHolder viewHolder, int position) { 
     // Get the data model based on position 
     Bracket bracket = bracketsList.get(position); 
     int color = UserPreferences.getInstance().getBracket(); 

     // Set item views based on your views and data model 
     TextView textView = viewHolder.nameTextView; 
     textView.setText(bracket.toString()); 
     Log.d("Bracket level", ""+bracket.getId()); 
     if(color < bracket.getId()) { 
      textView.setBackgroundResource(R.color.black); // suggests level is locked 
     } 

    } 

這種方法的問題,它是最初起作用的,但當我向下滾動並返回時,不應着色的物品最終被着色。爲什麼是這樣?有沒有更好的方式來實現這一點?

回答

1

回收視圖始終重用舊的視圖,以便您獲得的問題,爲了解決這個問題,你應該在調用bindViewHolder每次設定的顏色,於是嘗試去做這樣,

if(color < bracket.getId()) { 
    textView.setBackgroundResource(R.color.black); // suggests level is locked 
} else { 
    textView.setBackgroundResource(R.color.defaultcolor); // default color 
} 

這將正常工作。

+0

好的。我應該閱讀更多關於回收器視圖的工作原理。 – AeriaGlorisia

相關問題