实际上,我希望在RecyclerView
的{{1}}中查看特定项目。为此,我尝试在fragment.class
课程中设置getter
,然后尝试在我的adapter
中访问它,但我无法访问这些视图。
适配器类代码:
fragment
片段代码:
private List<ViewHolder> holder_list=new ArrayList<>();
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder_list.add(holder);
}
public ViewHolder getViewHolder(int position){
return holder_list.get(position);
}
答案 0 :(得分:1)
这是最简单的方法
如果你想获得项目的ViewHolder。
RecyclerView.ViewHolder viewHolder = rvList.getChildViewHolder(rvList.getChildAt(0));
或者如果你想获得项目的View对象。
View view = rvList.getChildAt(0);
使用你需要的那个。您可以获取视图或ViewHolder。你可以根据需要操纵它们。
修改:
getChildAt方法是可靠的,因为我也面临一段时间的问题,可能还没有修复。
您可以使用此代码
RecyclerView.ViewHolder holder = (RecyclerView.ViewHolder)
recyclerView.findViewHolderForAdapterPosition(position);
if (null != holder) {
holder.itemView.findViewById(R.id.xyz).setVisibility(View.VISIBLE);
}
编辑2:注意
这是众所周知的问题,如果您在设置列表后立即调用findViewHolderForAdapterPosition,则会出现NullPointerException。
如果已调用notifyDataSetChanged()但新布局尚未调用 已经计算过,这个方法将从新的返回null 在计算布局之前,视图的位置是未知的。
为了解决这个问题,你可以这样做。
recyclerView.postDelayed(new Runnable() {
@Override
public void run() {
RecyclerView.ViewHolder holder = (RecyclerView.ViewHolder)
recyclerView.findViewHolderForAdapterPosition(position);
if (null != holder) {
holder.itemView.findViewById(R.id.xyz).setVisibility(View.VISIBLE);
}
}
}, 50);