XRecyclerViewが取り外したピットの道(XRecyclerViewのバグ?)

2551 ワード

最近はプルダウンのリフレッシュ機能が必要なので、車輪を繰り返したくないので、わざわざ第三者のオープンソースlibを探してみました.
今ではサードパーティのプルダウンリフレッシュのオープンソースlibはとても多いですね.紹介しません.どうせ編集者はXRecyclerViewを見ています.
なぜかというと、実は友达がお勧めしてくれたのです...
XRecyclerViewは使いやすいので、編集者が使っている過程で、つるつるしていて、いろいろなアップドロップダウンロードがあります.
データもレイアウトも正常に表示されますが、あるitemを削除できる必要があります(まだクリックイベントをしていません).
RecyclerViewはすでに追加削除を持参しており、通常通りに行けば(元のRecyclerViewの削除後のエラーの問題を排除)、
正常に削除机能を実现することができて、しかし结果はいつも人の予想を裏切って、意外にもやはり问题が発生して、私は天を垂らします...
まあ、直接コードにしましょう.
編集者は、XRecyclerViewと元のRecyclerViewを使用して比較します.
XRecyclerViewの設定
        mAdapter = new TestAdapter(mContext,"XRecyclerView");
        mLlManager = new LinearLayoutManager(mContext);
        mLlManager.setOrientation(LinearLayoutManager.VERTICAL);
        mXRcView.setLayoutManager(mLlManager);
        mXRcView.setAdapter(mAdapter);
           
元のRecyclerViewの設定
        mAdapter = new TestAdapter(mContext,"RecyclerView");
        mLlManager = new LinearLayoutManager(mContext);
        mLlManager.setOrientation(LinearLayoutManager.VERTICAL);
        mRecycler.setLayoutManager(mLlManager);
        mRecycler.setAdapter(mAdapter);

以上の2つのプロパティの設定は同じで、adapterも同じです.
adapterのデータバインド方法を見て、3つの位置属性を印刷して、他のことをしません
   @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        Log.e("bug", mTag + " ---->   Adapter   " + holder.getAdapterPosition() + "   Layout   " + holder.getLayoutPosition() + "  position  " + position);
    }
          
それから応用しないで走って、いかなるクリックと削除の操作をしないで、直接コンソールを見て印刷します
まず元RecyclerViewを見て
E/bug: RecyclerView ---->   Adapter   0   Layout   0  position  0
E/bug: RecyclerView ---->   Adapter   1   Layout   1  position  1
E/bug: RecyclerView ---->   Adapter   2   Layout   2  position  2
E/bug: RecyclerView ---->   Adapter   3   Layout   3  position  3
ええ、大丈夫です.位置は同じです.
次にXRecyclerViewを見てみましょう
E/bug: XRecyclerView ---->   Adapter   1   Layout   1  position  0
E/bug: XRecyclerView ---->   Adapter   2   Layout   2  position  1
E/bug: XRecyclerView ---->   Adapter   3   Layout   3  position  2
E/bug: XRecyclerView ---->   Adapter   4   Layout   4  position  3
心は疲れて、道理でずっと掛けていて、この鍋は誰が背負っていますか?
原因を知って解決すればやりやすい、元のRecyclerView錯乱問題に基づいてholderを使用する.getAdapterPosition() 、holder.getLayoutPosition() 、position
一定の加減算操作を行えばよい
これはXRecyclerViewのバグですか?それとも私は偽のXRecyclerViewに出会ったのか