diff --git a/app/src/main/java/eu/faircode/email/AdapterAccount.java b/app/src/main/java/eu/faircode/email/AdapterAccount.java index cb38626bf3..3e9af8e11f 100644 --- a/app/src/main/java/eu/faircode/email/AdapterAccount.java +++ b/app/src/main/java/eu/faircode/email/AdapterAccount.java @@ -557,16 +557,11 @@ public class AdapterAccount extends RecyclerView.Adapter { @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { - holder.unwire(); TupleRuleEx rule = selected.get(position); + holder.powner.recreate(rule == null ? null : rule.id); + + holder.unwire(); holder.bindTo(rule); holder.wire(); } - - @Override - public void onViewDetachedFromWindow(@NonNull ViewHolder holder) { - holder.powner.recreate(); - } } diff --git a/app/src/main/java/eu/faircode/email/TwoStateOwner.java b/app/src/main/java/eu/faircode/email/TwoStateOwner.java index f13e7773f5..ead29f83d1 100644 --- a/app/src/main/java/eu/faircode/email/TwoStateOwner.java +++ b/app/src/main/java/eu/faircode/email/TwoStateOwner.java @@ -26,10 +26,13 @@ import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleRegistry; import androidx.lifecycle.OnLifecycleEvent; +import java.util.Objects; + // This class can be used as an externally controlled standalone or child life cycle owner public class TwoStateOwner implements LifecycleOwner { private String name; + private Object condition; private LifecycleRegistry registry; // https://developer.android.com/topic/libraries/architecture/lifecycle#lc @@ -87,6 +90,13 @@ public class TwoStateOwner implements LifecycleOwner { create(); } + void recreate(Object condition) { + if (!Objects.equals(this.condition, condition)) { + this.condition = condition; + recreate(); + } + } + void destroy() { Lifecycle.State state = registry.getCurrentState(); if (!state.equals(Lifecycle.State.DESTROYED)) {