RecyclerView повреждает представление, используя notifyItemMoved ()

У меня проблема с использованиемnotifyItemMoved() метод. Кажется, неправильно отображаются неподвижные виды.

В моем списке 4 элемента. То, что я хочу сделать, это анимировать обмен между элементом 1 и пунктом 3. Элементы 1 и 3 меняются правильно, но пункт 2 отображает то, что было в пункте 3!

Итак, список начинается примерно так:

Item 0
Item 1
Item 2
Item 3

И заканчивается так:

Item 0
Item 3
Item 3 <!-- What the heck has this changed for?
Item 1

Мой адаптер поддерживаетсяList mProductList, Я называю следующий код:

public void sortBackingListUsingSortingList(List<ProductWrapper> newProductItems) {
    Log.e("", "Before:");
    for(ProductWrapper wrapper : mProductItems) wrapper.log();
    for(int i = 0; i < newProductItems.size(); i++) {
        ProductWrapper currentItem   = mProductItems.get(i);
        ProductWrapper correctItem   = newProductItems.get(i);

        if(!currentItem.equals(correctItem)) {
            // Item in wrong place
            int indexOfCorrectItem = getIndexOfItemInList(mProductItems, correctItem);
            Collections.swap(mProductItems, i, indexOfCorrectItem);
            notifyItemMoved(i, indexOfCorrectItem);
            Log.e("", "notifyItemMoved(" + i + ", " + indexOfCorrectItem+")");
            Log.e("", "After:");
            for(ProductWrapper wrapper : mProductItems) wrapper.log();
        }
    }
}

Я также добавил запись вonBindViewHolder чтобы проверить, вызывается ли моя логика вида:

@Override
public void onBindViewHolder(HolderBasic holder, int position) {
    Log.e("", "onBindViewHolder(holder, " + position + ")");
    holder.fill(mProductItems.get(position));
}

Мои журналы выглядят так:

09-02 14:39:17.853  ﹕ Before:
09-02 14:39:17.853  : Item 0
09-02 14:39:17.853  : Item 1
09-02 14:39:17.853  : Item 2
09-02 14:39:17.853  : Item 3

09-02 14:39:17.854  ﹕ notifyItemMoved(1, 3)

09-02 14:39:17.854  ﹕ After:
09-02 14:39:17.854  : Item 0
09-02 14:39:17.854  : Item 3
09-02 14:39:17.854  : Item 2
09-02 14:39:17.854  : Item 1

09-02 14:39:17.867  ﹕ onBindViewHolder(holder, 1)
09-02 14:39:17.874  ﹕ onBindViewHolder(holder, 3)

Как вы можете видеть, у Item 2 нет никаких причин изменять его отображение - и тем не менее, это так. Кто-нибудь знает почему?

РЕДАКТИРОВАТЬ

Я могу обойти выше, проходя через весь адаптер и вызываяnotifyItemChanged() на каждом предмете. Неэффективное и не хорошее решение, но невидимое для пользователя.

Ответы на вопрос(1)

Ваш ответ на вопрос