viewHolder.getAdapterPosition()始终返回-1

时间:2015-03-19 22:29:59

标签: android android-support-library android-recyclerview android-viewholder

出于某种原因,我无法使用holder.getAdapterPosition(),因为它总是返回-1,但holder.getLayoutPosition()返回一个位置就好了。

我的onCreateViewHolder:

@覆盖

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。知道为什么会这样吗?

除此之外我的回收工作正常。

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

这似乎不是新版本的支持库(22.1.0)的问题。