有没有办法让reclerview的特定项目的ViewHolder
仅基于给定的位置?
类似于getViewHolder(position);
。
public MyViewHolder getViewHolder(int position){
MyViewHolder holder = null;
/**
Find ViewHolder here...
If Found initialize the holder..
holder = ?
**/
return holder;
}
此功能在我的Adapter类中,我正在寻找获取项目的ViewHolder
的方法,以便我可以更改我的自定义项{{1}的一个视图的值},我有股票,我无法找到办法,我试图搜索,但没有一个能帮助我。
任何?
答案 0 :(得分:1)
这不是ViewHolder的工作原理。 ViewHolder只是您所做的布局的持有者。 ViewHolder可以自动重复使用,所以如果你有100个项目,android将不会创建100个ViewHolders,而只是创建一些在屏幕上可见的ViewHolders。如果滚动RecyclerView,将重新使用不可见项目的ViewHolder。您只需要更改在方法onBindViewHolder
以下是示例
@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)
。
答案 1 :(得分:1)
if (your_recyclerview != null) {
val viewholder = your_recyclerview .findViewHolderForAdapterPosition(your positions)
if (viewholder != null){
adapter.pausePlayer(viewholder as FeedPostDetailCommentAdapter.FeedDetailViewHolder)
}
}
答案 2 :(得分:0)
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;
}
}
我希望它会对你有所帮助。 供您参考,您也可以访问此链接。
答案 3 :(得分:0)
简单的答案是是。
但是,强制创建 ViewHolder 所需付出的代价是,以编程方式滚动到所需位置,然后通过自定义滚动侦听器传递的回调捕获该位置。
应该花大约10分钟的时间来实现我对similar question的回答中所述的代码。