猿问

如何将背景颜色更改为 RecycleView 中的特定查看器项目?

我正在尝试更改 RecycleView 中特定项目的背景颜色。因为我也需要设置文本,所以我有以下代码可以正常工作:


protected void populateViewHolder(RankingViewHolder viewHolder, final Ranking model, int position) 

{

    final Context mContext = getActivity().getApplicationContext();


    viewHolder.txt_name.setText(model.getUserName());

    viewHolder.txt_score.setText(String.valueOf(model.getScore()));

    viewHolder.txt_class.setText(model.getUser_class());


    Picasso.with(mContext).load(model.getAvatarUrl()).error(R.drawable.ic_people_black_24dp).into(viewHolder.personPhoto);


    int totalRanking = adapter.getItemCount();

    int realRank = totalRanking - viewHolder.getAdapterPosition();


    viewHolder.ranknumber.setText("# "+String.valueOf(realRank));

}

这可以按我的意愿工作并realRank采用正确的值,并且viewHolder.ranknumber.setText("# "+String.valueOf(realRank));


设置正确的文本没有问题。


现在我正在尝试(因为我得到了正确的数字/文本结果,所以做出这样的 if 语句:


if(adapter.getItemCount() -viewHolder.getAdapterPosition() == 0)

{

    viewHolder.itemView.setBackgroundColor(Color.GREEN);

}


if(adapter.getItemCount() -viewHolder.getAdapterPosition() == 1)

{

    viewHolder.itemView.setBackgroundColor(Color.YELLOW);

}


if(adapter.getItemCount() -viewHolder.getAdapterPosition() == 2)

{

    viewHolder.itemView.setBackgroundColor(Color.BLUE);

}

(我尝试了String.valueOf(realRank)平等,realRank也尝试了平等)在所有情况下,我都有相同的结果。颜色在位置 1、2、3 应发生变化,但在 7、8、9 和 14、15、16 和 21、22、23 等位置发生变化。


我在这里想念什么?


public class RankingViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener 

{

    private ItemClickListener itemClickListener;


    public TextView txt_name, txt_score, txt_class, ranknumber;


    public ImageView personPhoto;



这行代码int realRank = totalRanking - viewHolder.getAdapterPosition();给出了一个数字(1、2、3、4、5、6 等)。为什么我不能用这个数字来检查相等性?


这会改变颜色,但不仅仅是 3 个第一个项目。当您向下滚动时,每 3 个第一个可查看项目的颜色会像以前一样更改,即 1、2、3、7、8、9 等。


守着一只汪
浏览 89回答 3
3回答

蝴蝶刀刀

尝试将它添加到您的适配器中,它可能会解决您的问题。@Override    public int getItemViewType(int position) {        return position;    }

慕的地8271018

请试一试在您的自定义适配器中覆盖@Overridepublic long getItemId(int position) {    return position;}并在您的适配器对象中:myAdapter.setHasStableIds(true);

紫衣仙女

在populateViewHolder添加这些代码行if(position == 0){  viewHolder.itemView.setBackgroundColor(Color.GREEN);}else if(position == 1){  viewHolder.itemView.setBackgroundColor(Color.YELLOW);}else if(position == 2){  viewHolder.itemView.setBackgroundColor(Color.BLUE);}else{  viewHolder.itemView.setBackgroundColor(Color.WHITE);}position 是 中的一个参数populateViewHolder。
随时随地看视频慕课网APP

相关分类

Java
我要回答