onCreateViewHolder总是返回-1

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (49)

为什么我的onCreateViewHolder位置总是-1?我似乎无法弄明白为什么

viewHolder.getAdapterPosition()始终为-1

@NonNull
@Override
public AdapterAllComments.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int a) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.model_rv_allcomments_container, viewGroup, false);


    ViewHolder viewHolder = new ViewHolder(view);



    for(int i = 0; i<mDepth.get(viewHolder.getAdapterPosition()); i++) {
        View divider = LayoutInflater.from(viewHolder.itemView.getContext())
               .inflate(R.layout.groupie_section_item_divider, viewHolder.viewHolderLayout, false);
        viewHolder.viewHolderLayout.addView(divider);

    }



    return viewHolder;
}

错误:

     ava.lang.ArrayIndexOutOfBoundsException: length=10; index=-1
    at java.util.ArrayList.get(ArrayList.java:439)
    at com.example.evan.foodforum2.AdapterAllComments.onCreateViewHolder(AdapterAllComments.java:72)
    at com.example.evan.foodforum2.AdapterAllComments.onCreateViewHolder(AdapterAllComments.java:18)
    at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6794)
    at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5975)
    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
提问于
用户回答回答于

我似乎无法弄清楚为什么viewHolder.getAdapterPosition()总是-1。

嗯,其实很简单:

// You are creating a new instance of the `ViewHolder`
ViewHolder viewHolder = new ViewHolder(view);

// and then immediately are calling
viewHolder.getAdapterPosition()

但是这ViewHolder还没有附加到任何东西,例如:RecyclerView没有使用它,适配器没有初始化,所以你收到-1因为适配器位置的默认值-1

如果你想在列表项之间有分隔,那么你应该查看 DividerItemDecoration

所属标签

可能回答问题的人

  • 天使的炫翼

    17 粉丝531 提问36 回答
  • 富有想象力的人

    3 粉丝0 提问30 回答
  • 学生

    3 粉丝476 提问28 回答
  • o o

    4 粉丝494 提问27 回答

扫码关注云+社区

领取腾讯云代金券