1

当设置OnClickListenersRecyclerView项目它的建议去做,在这样的内部类:Android - 编程风格 - RecyclerView - 在ViewHolder或onBindViewHolder中使用SetText?

public ViewHolder(View itemView) { 
    super(itemVIew); 
    nameTextView = (TextView) itemView.findViewById(R.id.item_name); 
    itemView.setOnClickListener(this); 
} 

当我看到设置文本代码通常是在onBindViewHolder方法:

@Override 
public void onBindViewHolder(SetPlayerNameViewHolder holder, int position) { 
    holder.nameTextView.setText(String.valueOf("Random Text")); 
} 

如果文本从不改变,它不应该在内部类吗?

public ViewHolder(View itemView) { 
    super(itemVIew); 
    nameTextView = (TextView) itemView.findViewById(R.id.item_name); 
    nameTextView.setText(String.valueOf("Random Text")); 
    itemView.setOnClickListener(this); 
} 

编辑:如果您检索的值是所有TextViews不同,但是当RecyclerView重新加载

public ViewHolder(View itemView) { 
    super(itemVIew); 
    nameTextView = (TextView) itemView.findViewById(R.id.item_name); 

    // Not the actual methods, but to make it more readable 
    int i = itemView.getPosition() 
    String randomText = getTextFromDatabaseWhereRowIs(i) 

    nameTextView.setText(String.valueOf(randomText)); 
    itemView.setOnClickListener(this); 
} 

回答

2

是的,你是对的不应该更新什么...

1.onBindViewHolder(..., int position)被要求为individual项目的RecyclerView。如果您的text每个item都不相同,那么您应该从onBindViewHolder()使用position来获得正确的text

@Override 
public void onBindViewHolder(SetPlayerNameViewHolder holder, int position) { 
    String item = YourList.get(position); // For example YourList is an ArrayList of String 
    holder.nameTextView.setText(item); 
} 

2.如果text是固定的,每个item那么你可以从ViewHolder正如你所说的设置或者你可以把它从TextView的XML使用android:text="YOUR_TEXT"修复。

public ViewHolder(View itemView) { 
    super(itemVIew); 
    nameTextView = (TextView) itemView.findViewById(R.id.item_name); 
    nameTextView.setText("Random Text"); 
} 

希望这将有助于〜

+0

感谢您接受我的回答:) – FAT

0

这个方法在内部调用onBindViewHolder(ViewHolder,INT)在给定位置更新与项目RecyclerView.ViewHolder内容,还设置了一些私人领域被RecyclerView使用。

将您从参数中收到ViewHolder,来自CacheRecyclerView.RecycledViewPool

RecycledViewPool允许您在多个RecyclerView之间共享视图。 如果要跨RecyclerViews回收视图,请创建RecycledViewPool实例并使用setRecycledViewPool(RecycledViewPool)。 如果您没有提供RecyclerView,RecyclerView会自动创建一个池。

所以,如果你没有使用相同的viewType,并在不同的RecyclerView相同的布局,其中TextView的文本是每个RecyclerView不同,那么你是对的。但是如果您这样做,则RecyclerView可能不会调用createViewHolder(ViewGroup parent, int viewType),因为它可能是RecycledViewPool中的一个视图处理器。在这种情况下,您可以设置文本值onViewAttachedToWindow(VH holder)

相关问题