【问题标题】:viewHolder.getAdapterPosition() always returns -1viewHolder.getAdapterPosition() 总是返回 -1
【发布时间】:2015-03-19 22:29:59
【问题描述】:

由于某种原因,我无法使用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 为空。知道为什么会这样吗?

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

    如果 parent 为 null,则意味着 ViewHolder 不是 RecyclerView 的子级,因此我们没有跟踪它的位置。布局位置是它布局时的最新位置。

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

    【讨论】:

    • 那我是不是做错了什么?我应该设置父母吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-11-21
      • 2019-10-10
      • 2014-04-13
      • 2017-03-20
      • 2013-11-04
      • 2011-12-09
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多