2017-07-20 4 views
1

本質的に、私はレベルのリストを持っているrecyclerviewを持っています。しかし、本質的に、私は特定のアイテムは、彼らがまだロックされていないことを示唆する黒色の背景を持ちたい(種類のビデオゲームのように)特定のアイテムについて、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

リサイクルビューは常に、これは正常に動作します

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

、あなたは問題を解決するために、その問題を取得しているので、あなたは色にbindViewHolderを呼び出すたびに設定されているので、次のようにやってみてください古いビューを再利用します。

+0

良いキャッチ。私はrecyclerviewの仕組みについてもっと読むべきだった。 – AeriaGlorisia

関連する問題