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数据[重复]