Atasi RecyclerView Blinking (berkedip)

Masalah berkedip yang Anda alami setelah memanggil notifyItemChanged(pos) dalam RecyclerView mungkin terkait dengan animasi perubahan item bawaan. Secara default, RecyclerView menerapkan animasi fade-in/fade-out ketika suatu item diubah. Jika animasi ini tidak diinginkan, Anda dapat menonaktifkannya dengan menggunakan ItemAnimator.

Berikut adalah cara mencegah efek berkedip:

RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setItemAnimator(null); // Nonaktifkan animasi perubahan item bawaan

// Sekarang, ketika Anda memanggil notifyItemChanged(pos), itu tidak akan memiliki animasi fade-in/fade-out default.

Dengan mengatur ItemAnimator ke null, Anda efektif menonaktifkan animasi default untuk perubahan item.

Alternatifnya, jika Anda ingin tetap menggunakan beberapa animasi tetapi hanya menonaktifkan efek berkedip, pertimbangkan untuk menyesuaikan ItemAnimator itu sendiri. Misalnya, Anda dapat membuat ItemAnimator khusus yang tidak termasuk efek fade:

public class NoBlinkItemAnimator extends DefaultItemAnimator {
    @Override
    public boolean animateChange(@NonNull RecyclerView.ViewHolder oldHolder, @NonNull RecyclerView.ViewHolder newHolder, @Nullable ItemHolderInfo preInfo, @Nullable ItemHolderInfo postInfo) {
        // Lewati animasi default untuk perubahan item
        dispatchChangeFinished(oldHolder, true);
        dispatchChangeFinished(newHolder, false);
        return false;
    }
}

Kemudian, tetapkan ItemAnimator khusus Anda ke RecyclerView:

RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setItemAnimator(new NoBlinkItemAnimator());

Dengan cara ini, Anda dapat memiliki lebih banyak kontrol atas efek animasi jika Anda ingin tetap menggunakan beberapa animasi tetapi menghilangkan perilaku berkedip.

RecyclerView memiliki animasi bawaan yang biasanya menambahkan efek halus yang bagus. dalam kasus Anda, Anda ingin menonaktifkannya:

(mRecyclerView?.itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false

Post a Comment

Previous Next

نموذج الاتصال