Recycler View重复,如何查看一次

Posted

技术标签:

【中文标题】Recycler View重复,如何查看一次【英文标题】:Recycler View repeats, how to view it once 【发布时间】: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;
    

感谢您的帮助! :)

【问题讨论】:

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

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

【讨论】:

以上是关于Recycler View重复,如何查看一次的主要内容,如果未能解决你的问题,请参考以下文章

如何使 Recycler View 表现得像 PlayStore Recycler Views

Recycler View Android中的Firestore数据[重复]

如何制作自定义形状的 Recycler View?

如何突出显示 Recycler View 的选定项目?

如何使用 Recycler View 的长按位置获取 SQLite 列值?

使用 Recycler View 时如何在 Text To Speech 中实现错误处理