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
}
但这不是完整的解决方案,但为您的问题提供了一些逻辑/输入。
突出显示的文本与案例 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
}
但这不是完整的解决方案,但为您的问题提供了一些逻辑/输入。