在滚动RecyclerView getting exception(获取异常)时:-;java.lang.IndexOutOfBoundsException:检测到不一致。无效项目位置21“;

在滚动RecyclerView getting exception(获取异常)时:-;java.lang.IndexOutOfBoundsException:检测到不一致。无效项目位置21“;,java,android,android-recyclerview,Java,Android,Android Recyclerview,我正在我的应用程序中使用RecyclerView和Sqlite。 因为我已经从SQlite加载了RecyclerView,然后在后台调用服务,并尝试通过notifyDataSetChanged()方法通知RecyclerView,但在滚动RecyclerView时(当RecyclerView正在更新或通知时)出现意外异常 请检查我的setAdapter() private void setAdapter() { if (adapter == null) {

我正在我的应用程序中使用
RecyclerView
Sqlite
。 因为我已经从
SQlite
加载了
RecyclerView
,然后在后台调用服务,并尝试通过
notifyDataSetChanged()
方法通知
RecyclerView
,但在滚动
RecyclerView
时(当
RecyclerView
正在更新或通知时)出现意外异常

请检查我的
setAdapter()

  private void setAdapter() {

        if (adapter == null) {
            adapter = new EmojiAdapter(stickerArrayList, getActivity(), "Sticker", stickerIdArrayList);
            RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
            rvEmoji.setLayoutManager(mLayoutManager);
            rvEmoji.setItemAnimator(new DefaultItemAnimator());
            rvEmoji.setAdapter(adapter);
        } else {

            adapter.notifyDataSetChanged();

        }

    }
我已经尝试了所有的
RecyclerView.stopScroll()
RecyclerView.GetRecycleredViewPool().clear()
,但问题并不是很简单

例外情况

java.lang.IndexOutOfBoundsException:检测到不一致。项目位置21(偏移量:21)无效。状态:32 在android.support.v7.widget.RecyclerView$Recycler.TryGetViewHolderFormationByDaildate(RecyclerView.java:5546)上 位于android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5482) 位于android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5478) 位于android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2215) 位于android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1542) 位于android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1502) 位于android.support.v7.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1316) 位于android.support.v7.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:1061) 位于android.support.v7.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:4769) 在android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 位于android.view.Choreographer.doCallbacks(Choreographer.java:574) 位于android.view.Choreographer.doFrame(Choreographer.java:543) 在android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)中 位于android.os.Handler.handleCallback(Handler.java:733) 位于android.os.Handler.dispatchMessage(Handler.java:95) 位于android.os.Looper.loop(Looper.java:136) 位于android.app.ActivityThread.main(ActivityThread.java:5095) 位于java.lang.reflect.Method.Invokenactive(本机方法) 位于java.lang.reflect.Method.invoke(Method.java:515) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)上 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 在dalvik.system.NativeStart.main(本机方法)

有很多类似的问题,但我没有得到预期的结果。这是我在这里发布问题之前访问过的链接。






我访问了所有的链接,并尝试了他们最好的解决方案,但它对我不起作用

我正在为RecyclerView使用以下gradle版本

compile 'com.android.support:recyclerview-v7:26.+'
请检查我正在使用的适配器类,如下所示:-

public class EmojiAdapter extends RecyclerView.Adapter<EmojiAdapter.MyViewHolder> {

    private Activity activity;
    private HashMap<String, ArrayList<EmojiBean>> arrayList = new HashMap<>();
    private String sticker_emoji;
    private ArrayList<String> keyArrayList = new ArrayList<>();

    public class MyViewHolder extends RecyclerView.ViewHolder {

        private RecyclerView rvItemCreation;
        private TextView txtStickerName, txtBy, txtCreator;
        private ImageView imgForward, imgDownload;

        private MyViewHolder(View view) {
            super(view);

            rvItemCreation = (RecyclerView) view.findViewById(R.id.rvItemCreation);
            txtStickerName = (TextView) view.findViewById(R.id.txtStickerName);
            txtBy = (TextView) view.findViewById(R.id.txtBy);
            txtCreator = (TextView) view.findViewById(R.id.txtCreator);
            imgForward = (ImageView) view.findViewById(R.id.imgForward);
            imgDownload = (ImageView) view.findViewById(R.id.imgDownload);

            txtStickerName.setTypeface(Constant.setCustomFont(activity, "Montserrat-SemiBold.otf"));
            txtBy.setTypeface(Constant.setCustomFont(activity, "Montserrat_Regular.otf"));
            txtCreator.setTypeface(Constant.setCustomFont(activity, "Montserrat_Regular.otf"));

        }
    }


    public EmojiAdapter(HashMap<String, ArrayList<EmojiBean>> arrayList, Activity activity, String sticker_emoji, ArrayList keyArrayList) {
        this.arrayList = arrayList;
        this.activity = activity;
        this.sticker_emoji = sticker_emoji;
        this.keyArrayList = keyArrayList;


    }


    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.my_media_item, parent, false);

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {


        if (sticker_emoji.equalsIgnoreCase("Sticker")) {
            holder.imgForward.setImageResource(R.drawable.forward_icon);
        } else {
            holder.imgForward.setImageResource(R.drawable.delete_icon);
        }


        if (arrayList.size() > position) {
            MyCreationItemAdapter mAdapter = new MyCreationItemAdapter(arrayList.get(keyArrayList.get(position)), activity);
            RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false);
            holder.rvItemCreation.setLayoutManager(mLayoutManager);
            holder.rvItemCreation.setItemAnimator(new DefaultItemAnimator());
            holder.rvItemCreation.setAdapter(mAdapter);
        }


    }

    @Override
    public int getItemCount() {
        return arrayList.size();
    }


}
公共类EmojiAdapter扩展了RecyclerView.Adapter{
私人活动;
private HashMap arrayList=new HashMap();
私人字符串贴纸\u表情符号;
private ArrayList keyArrayList=新建ArrayList();
公共类MyViewHolder扩展了RecyclerView.ViewHolder{
私人RecyclerView项目创建;
私有文本视图txtName、txtBy、txtCreator;
私有图像视图imgForward,imgDownload;
私有MyViewHolder(视图){
超级(视图);
rvItemCreation=(RecyclerView)view.findViewById(R.id.rvItemCreation);
txtStickerName=(TextView)view.findViewById(R.id.txtStickerName);
txtBy=(TextView)view.findViewById(R.id.txtBy);
txtCreator=(TextView)view.findViewById(R.id.txtCreator);
imgForward=(ImageView)view.findViewById(R.id.imgForward);
imgDownload=(ImageView)view.findViewById(R.id.imgDownload);
txtStickerName.setTypeface(Constant.setCustomFont(activity,“Montserrat SemiBold.otf”);
setTypeface(Constant.setCustomFont(活动,“Montserrat_Regular.otf”);
setTypeface(Constant.setCustomFont(活动,“Montserrat_Regular.otf”);
}
}
公共EmojiAdapter(HashMap arrayList、Activity Activity、String sticker_emoji、arrayList keyArrayList){
this.arrayList=arrayList;
这个。活动=活动;
this.sticker\u emoji=sticker\u emoji;
这是凯亚拉
rvEmoji.setItemAnimator(new DefaultItemAnimator());
@Override 
public boolean supportsPredictiveItemAnimations() { 
       return false; 
}