Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b78c284b authored by Chet Haase's avatar Chet Haase
Browse files

Always execute actions on the runQueue

A View that is not attached will place posted actions on the
ViewRoot's runQueue. Previously, this runQueue was only ever executed
during a layout (during performTraversals()). This works in most situations
(a View that is added to or removed from the hierarchy will force a layout
in general), but not in all cases. For example, a new View being added to
a ListView will not cause a layout, so any actions posted to that View
prior to its being attached will not be run until some indeterminate time
later when a layout happens to run.

The fix is to execute the (typically empty) runQueue on every traversal.

Issue #6366678 View.post() ignored when called on an unattached ListView item

Change-Id: I94e6fdd9da6bb57fd83b547f8d742cd0ddfecbd6
parent 5b086eb5
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -1199,13 +1199,13 @@ public final class ViewRootImpl implements ViewParent,
            }
        }

        // Execute enqueued actions on every traversal in case a detached view enqueued an action
        getRunQueue().executeActions(attachInfo.mHandler);

        boolean insetsChanged = false;

        boolean layoutRequested = mLayoutRequested && !mStopped;
        if (layoutRequested) {
            // Execute enqueued actions on every layout in case a view that was detached
            // enqueued an action after being detached
            getRunQueue().executeActions(attachInfo.mHandler);

            final Resources res = mView.getContext().getResources();