如何获得RecyclerView的特定项目视图?

时间:2018-04-15 15:49:56

标签: android android-recyclerview recycler-adapter

实际上,我希望在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);
}

1 个答案:

答案 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   在计算布局之前,视图的位置是未知的。

link

为了解决这个问题,你可以这样做。

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);