由于某种原因,我无法使用holder.getAdapterPosition(),因为它始终返回-1,但是holder.getLayoutPosition()返回的位置恰好。

我的onCreateViewHolder:

@Override

public ViewHolder onCreateViewHolder(ViewGroup parent,
                                     int viewType) {
    // create a new view
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.my_item, parent, false);


    ViewHolder vh = new ViewHolder(this, v);
    return vh;
}

我的ViewHolder构造函数:
public ViewHolder(DirectoryListAdapter adapter, View linear) {
            super(linear);
            this.adapter = adapter;
            this.linear = (LinearLayout) linear;
            this.entryName = (TextView) linear.findViewById(R.id.item_name);
            this.entryImage = (ImageView) linear.findViewById(R.id.item_image);

}

我进一步看了看,getAdapterPosition看起来像这样:
 public final int getAdapterPosition() {
            final ViewParent parent = itemView.getParent();
            if (!(parent instanceof RecyclerView)) {
                return -1;
            }
            final RecyclerView rv = (RecyclerView) parent;
            return rv.getAdapterPositionFor(this);
        }

基本上发生的是ViewParent为null。知道为什么会这样吗?

除此之外,我的回收商还可以正常工作。

谢谢。

最佳答案

如果parent为null,则表示ViewHolder不是RecyclerView的子级,因此我们尚未跟踪其位置。布局位置是布局时的最新位置。

在以下版本中,我们将扩展getAdapterPosition的范围。

10-08 15:35