我正在尝试更改 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;
}
慕的地8271018
TA贡献1796条经验 获得超4个赞
请试一试
在您的自定义适配器中覆盖
@Override
public long getItemId(int position) {
return position;
}
并在您的适配器对象中:
myAdapter.setHasStableIds(true);
紫衣仙女
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。
添加回答
举报
0/150
提交
取消