observable collection animations optimized a bit

This commit is contained in:
Gavriil Sitnikov 2016-07-16 15:16:33 +03:00
parent b0dc24d554
commit 98198eb1e2
1 changed files with 25 additions and 1 deletions

View File

@ -28,6 +28,7 @@ import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import ru.touchin.roboswag.components.R;
@ -68,6 +69,8 @@ public abstract class ObservableCollectionAdapter<TItem, TViewHolder extends Obs
private final ObservableList<TItem> innerCollection = new ObservableList<>();
private boolean anyChangeApplied;
@NonNull
private final List<RecyclerView> attachedRecyclerViews = new LinkedList<>();
public ObservableCollectionAdapter(@NonNull final UiBindable uiBindable) {
super();
@ -105,6 +108,18 @@ public abstract class ObservableCollectionAdapter<TItem, TViewHolder extends Obs
}));
}
@Override
public void onAttachedToRecyclerView(@NonNull final RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
attachedRecyclerViews.add(recyclerView);
}
@Override
public void onDetachedFromRecyclerView(@NonNull final RecyclerView recyclerView) {
super.onDetachedFromRecyclerView(recyclerView);
attachedRecyclerViews.remove(recyclerView);
}
@NonNull
public UiBindable getUiBindable() {
return uiBindable;
@ -142,12 +157,21 @@ public abstract class ObservableCollectionAdapter<TItem, TViewHolder extends Obs
refreshUpdate();
}
private boolean anyRecyclerViewShown() {
for (final RecyclerView recyclerView : attachedRecyclerViews) {
if (recyclerView.isShown()) {
return true;
}
}
return false;
}
protected void onItemsChanged(@NonNull final ObservableCollection.CollectionChange<TItem> collectionChange) {
if (Looper.myLooper() != Looper.getMainLooper()) {
Lc.assertion("Items changes called on not main thread");
return;
}
if (!anyChangeApplied) {
if (!anyChangeApplied || !anyRecyclerViewShown()) {
anyChangeApplied = true;
refreshUpdate();
return;