Recyclerview IndexOutOfBoundsException:检测到不一致。视图持有者适配器positionViewHolder无效

时间:2017-05-15 08:01:29

标签: android android-recyclerview

我有一个聊天应用程序,其中创建新聊天时,消息列表中没有消息。当用户进入聊天并发送第一条消息时。该应用程序崩溃时出现以下错误代码

Pageable

以下是我将适配器附加到recyclerview的代码。

@Query

请帮忙

2 个答案:

答案 0 :(得分:0)

每次使用RecyclerView中提供的众多方法之一添加或删除列表中的内容时,您应该刷新列表:

https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html

  

final void notifyDataSetChanged()   通知任何注册观察员   数据集已经改变。

     

final void notifyItemChanged(int position,Object payload)   通知任何   已登记的观察员认为该位置的项目已改变   可选的有效负载对象。

     

final void notifyItemChanged(int position)   通知任何注册观察员该位置的项目已更改。

     

final void notifyItemInserted(int position)   通知任何注册观察员在位置上反映的项目是>新插入。

     

final void notifyItemMoved(int fromPosition,int toPosition)   通知任何注册观察员在fromPosition反映的项目   被转移到了位置。

     

final void notifyItemRangeChanged(int positionStart,int itemCount,   对象有效负载   通知任何注册观察者itemCount项目从位置开始> positionStart已经改变。

     

final void notifyItemRangeChanged(int positionStart,int itemCount)   通知任何注册观察员itemCount项目从   position positionStart已经改变。

     

final void notifyItemRangeInserted(int positionStart,int itemCount)   通知任何注册观察者当前反映的itemCount   已经新插入了从positionStart开始的项目。

     

final void notifyItemRangeRemoved(int positionStart,int itemCount)   通知任何注册观察员之前的itemCount项目   位于positionStart的位置已从数据集中删除。

     

final void notifyItemRemoved(int position)   通知任何注册观察者先前位于>位置的物品。已从数据集中删除。

在没有查看更多细节的情况下,我会说当您尝试滚动到最后一项时会出现问题。在滚动之前尝试刷新数据集,看看会发生什么:

  Log.d(TAG, "Scrolling to pos "+ (messageCount - 1));
            try {
                notifyDataSetChanged();
                conversationRecyclerView.scrollToPosition(mMessageAdapter.getItemCount() - 1);
            } catch (Exception e){
                Log.d(TAG, e.toString());
            }

答案 1 :(得分:0)

conversationRecyclerView.setItemAnimator(new DefaultItemAnimator());替换为conversationRecyclerView.setItemAnimator(null);