【问题标题】:Recycler View repeats, how to view it onceRecycler View重复,如何查看一次
【发布时间】:2021-08-13 18:53:27
【问题描述】:

突出显示的文本与案例 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;
    }
}

感谢您的帮助! :)

【问题讨论】:

  • 不要使用位置来操作列表数据。使用与数据本身相关的东西。就像如果用户对象有一个标志,表示它是金/银/铜,你可以用它来显示徽章而不是位置。
  • 你能告诉我更多你是怎么想的吗?不过已经谢谢你的回答了!

标签: android android-recyclerview android-viewholder


【解决方案1】:

我们需要在模型类中设置一个标志字段,像这样传递给recyclerview adapter

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 的标志,如下所示显示徽章/设置颜色。

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 
    }

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

【讨论】:

    猜你喜欢
    • 2021-07-19
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    相关资源
    最近更新 更多