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)

相關問題