为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守着一只汪 2022-06-23 19:29:48
我正在尝试更改 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 等。
查看完整描述

3 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

尝试将它添加到您的适配器中,它可能会解决您的问题。


@Override

    public int getItemViewType(int position) {

        return position;

    }


查看完整回答
反对 回复 2022-06-23
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

请试一试


在您的自定义适配器中覆盖


@Override

public long getItemId(int position) {

    return position;

}

并在您的适配器对象中:


myAdapter.setHasStableIds(true);


查看完整回答
反对 回复 2022-06-23
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

在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。


查看完整回答
反对 回复 2022-06-23
  • 3 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信