2017-04-03 8 views
1

こんにちは私はリサイクラービューで特定のアイテムの色を変更したいと思います。 私はこのコードを使ってこれを行っています。recylerview androidの特定のアイテムの色を変更する

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> { 

LayoutInflater inflater; 
Context context; 
clickME click; 
View view; 

ArrayList<String > data; 

public CustomAdapter(Context context,ArrayList<String> data) { 
    this.context=context; 
    this.data=data; 
    inflater= LayoutInflater.from(context); 

} 

@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    view=inflater.inflate(R.layout.list_row,parent,false); 

    MyViewHolder holder=new MyViewHolder(view); 
    return holder; 
} 

@Override 
public void onBindViewHolder(MyViewHolder holder, int position) { 


    int select=4; 
    if(select == position) { 
     view.setBackgroundColor(Color.BLUE); 
     Toast.makeText(context,""+position,Toast.LENGTH_SHORT).show(); 
    } else { 
     view.setBackgroundColor(Color.parseColor("#214F4B")); 
     Toast.makeText(context,""+position,Toast.LENGTH_SHORT).show(); 

    } 
    holder.tv_title.setText(data.get(position)); 



} 

が、出力iは正常位置4の項目の背景色を変更し、私は位置14にある項目の背景色を下にスクロールしたときにも変化している enter image description here

enter image description here

あります。なぜこのようなことが親切に私の問題を解決するのか分かりません。

+0

'onBindViewHolder()'の 'view'とは何ですか?コードが完全ではありません –

+0

@SergeyGlotovコードをチェックして解決してください – Dani

答えて

3

あなたはviewビューをリサイクルしていません。あなたはViewHolderコードを投稿していませんが、onBindViewHolderメソッドでview.setBackgroundColor(...)の代わりにholder.view.setBackgroundColor(...)を使用してください。

+0

感謝しています。 – Dani

+0

あなたは最初の5つのアイテムの色の色を変更する方法を教えてくださいできますか? – Dani

+0

あなたは今やっていることと同じことができますが、 'position <= 4' –

0

onCreateViewHolder()からビューを再利用しないでください。コードは次のようになります:

@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    View view = inflater.inflate(R.layout.list_row, parent, false); 

    MyViewHolder holder = new MyViewHolder(view); 
    return holder; 
} 

@Override 
public void onBindViewHolder(MyViewHolder holder, int position) { 

    int select = 4; 
    if (select == position) { 
     holder.itemView.setBackgroundColor(Color.BLUE); 
     Toast.makeText(context, "" + position, Toast.LENGTH_SHORT).show(); 
    } else { 
     holder.itemView.setBackgroundColor(Color.parseColor("#214F4B")); 
     Toast.makeText(context, "" + position, Toast.LENGTH_SHORT).show(); 
    } 
    holder.tv_title.setText(data.get(position)); 
} 
関連する問題