Android - 编程风格 - RecyclerView - 在ViewHolder或onBindViewHolder中使用SetText?

时间:2017-04-22 14:11:59

标签: android data-binding android-recyclerview settext android-viewholder

OnClickListeners设置为RecyclerView中建议在内部类中执行此操作的项目,如下所示:

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 个答案:

答案 0 :(得分:3)

是的,你是对的......

1。 onBindViewHolder(..., int position)调用individualRecyclerView。如果text的{​​{1}}与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); }

text

2。如果每个item修复了ViewHolder,那么您可以按照说明从XML进行设置,也可以从TextView修复android:text="YOUR_TEXT" {1}}使用public ViewHolder(View itemView) { super(itemVIew); nameTextView = (TextView) itemView.findViewById(R.id.item_name); nameTextView.setText("Random Text"); }

cap = cv2.VideoCapture(0)

希望这会有所帮助〜

答案 1 :(得分:0)

  

此方法在内部调用onBindViewHolder(ViewHolder,int)以使用给定位置的项目更新RecyclerView.ViewHolder内容,并设置一些要由RecyclerView使用的私有字段。

您从参数收到的ViewHolder来自CacheRecyclerView.RecycledViewPool

  

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

因此,如果您未在viewType中使用相同的RecyclerView和相同的布局,TextView的{​​{1}}的文字在RecyclerView中不同,那么您就是对。但是,如果您这样做,那么RecyclerView可能不会调用createViewHolder(ViewGroup parent, int viewType),因为它可能来自RecycledViewPool的viewHolder。在这种情况下,您可以在onViewAttachedToWindow(VH holder)

中设置文本值