[英]How to get ViewHolder of specific Item of Recyclerview
有沒有辦法僅根據給定位置獲取ViewHolder
的特定項的ViewHolder
?
類似於getViewHolder(position);
.
public MyViewHolder getViewHolder(int position){
MyViewHolder holder = null;
/**
Find ViewHolder here...
If Found initialize the holder..
holder = ?
**/
return holder;
}
此函數在我的 Adapter 類中,我正在尋找一種獲取項目的ViewHolder
的方法,以便我可以更改自定義項目的一個視圖的值, eg. holder.setText("Hello World");
eg. holder.setText("Hello World");
,我是股票,我找不到辦法做到這一點,我試圖搜索但沒有人幫助我。
有人嗎?
這不是 ViewHolder 的工作方式。 ViewHolder 只是您制作的布局的持有者。 ViewHolder 可以自動重用,所以如果你有 100 個項目,android 不會創建 100 個 ViewHolders,而只是一些在屏幕上可見的 ViewHolders。 如果滾動 RecyclerView,不可見項的 ViewHolder 將被重新使用。 您只需要更改在方法onBindViewHolder
自動傳遞的 ViewHolder 上的數據
這是例子
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.textViewTitle.setText(data.get(position).title);
holder.textViewContent.setText(data.get(position).content);
Context context = holder.button.getContext();
holder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "you clicked the button!", Toast.LENGTH_SHORT).show();
}
});
}
編輯:為了更清楚,您應該做的是更改適配器中的特定數據,例如您可以像這樣在適配器中創建一個方法
public void changeItem(int position, ItemModel newItemModel){
mItemModelList.remove(position);
mItemModelList.add(position, newItemModel);
}
然后調用您的適配器的notifyItemChanged(int position)
。
if (your_recyclerview != null) {
val viewholder = your_recyclerview .findViewHolderForAdapterPosition(your positions)
if (viewholder != null){
adapter.pausePlayer(viewholder as FeedPostDetailCommentAdapter.FeedDetailViewHolder)
}
}
public static RecyclerView.ViewHolder getViewHolder(View view) {
RecyclerView rv = getParentRecyclerView(view);
View rvChild = getParentViewHolderItemView(view);
if (rv != null && rvChild != null) {
return rv.getChildViewHolder(rvChild);
} else {
return null;
}
}
我希望它會幫助你。 您也可以訪問此鏈接以供參考。
簡單的答案是肯定的。
但是,您為強制創建ViewHolder付出的代價是以編程方式滾動到所需位置,然后通過從自定義滾動偵聽器傳遞的回調捕獲它。
應該需要大約 10 分鍾來實現我對類似問題的回答中描述的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.