RecyclerView重复,如何查看一次

Recycler View repeats, how to view it once

突出显示的文本与案例 0/案例 1/案例 2 一起显示。正如我所说,它在整数重复后重复。

我的计划是只将前 3 个用户显示为位置编号 1、2、3(金、银、铜)。 所以我不希望这种模式再次重复,就像我的情况一样。

在我的 android 应用程序中,我使用了 ViewHolder 和 RecyclerView。如下图 1 所示: here

public class HighscoreAdapter extends RecyclerView.Adapter<HighscoreAdapter.ViewHolder> {
private List<User> userList;
private Context context;

public HighscoreAdapter(Context context,List<User> userList) {
    this.userList = userList;
    this.context = context;
}

@NonNull
@Override
public HighscoreAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.item_high_score_list,parent,false);
    return new ViewHolder(view);
}

 public void onBindViewHolder(@NonNull HighscoreAdapter.ViewHolder holder, int position) {
    String userNickText = userList.get(position).getUserName();
    String userLetterText = context.getString(R.string.correct_letter_count)+ " " + userList.get(position).getUserLetterCount();
    String userWPMText = context.getString(R.string.WPM) + " " + userList.get(position).getUserScore();
    holder.textViewUserNick.setText(userNickText);
    holder.textViewUserScore.setText(userLetterText);
    holder.textViewUserLetter.setText(userWPMText);

          

我确定问题是位置被计算为整数,这意味着它计数为 0-9。 所以在 10 之后它再次从 0 开始。

        switch (position){
        case 0:
            holder.imgUserScore.setImageResource(R.drawable.gold);
            holder.itemView.findViewById(R.id.card_view).setBackgroundColor(Color.parseColor("#fffca2"));
            break;
        case 1:
            holder.imgUserScore.setImageResource(R.drawable.silber);
            holder.itemView.findViewById(R.id.card_view).setBackgroundColor(Color.parseColor("#dbdbdb"));
            break;
        case 2:
            holder.imgUserScore.setImageResource(R.drawable.bronze);
            holder.itemView.findViewById(R.id.card_view).setBackgroundColor(Color.parseColor("#ffd2a1"));
            break;
    }
}

感谢您的帮助! :)

我们需要在您传递给 recyclerview adapter 的模型 class 中设置一个标志字段

Class User{
   String name;
   int placeType; // This is the flag we need to set up.
   
   User(String name, int placeType)
   // setters and getters for the fields name and placeType
}

在适配器内部,在将数据绑定到视图时,您需要验证 placeType 的标志,如下所示显示 badges/setting 颜色。

public void onBindViewHolder(@NonNull HighscoreAdapter.ViewHolder holder, int position) {
    String name = userList.get(position).getName();
    int placeType=  userList.get(position).getPlaceType();
    // other snippets
    //Set the color like below based on place type.

    if(placeType== 1){ // First place
       itemview.setBackgroundColor("GOLD COLOR")
    }else if(placeType== 2){ // Second place
       itemview.setBackgroundColor("SILVER COLOR")
    }else if(placeType== 3){ // Third place
       itemview.setBackgroundColor("BRASS COLOR")
    }else{
       itemview.setBackgroundColor("NO COLOR") // For other cases 
    }

但这不是完整的解决方案,但为您的问题提供了一些逻辑/输入。