Fix erroneous requestLayout-during-layout issues
In general, calling requestLayout() during layout is a Bad Idea. However, ListView does this during the normal course of its layout, as it removes and adds views during layout. However, it handles this properly, ensuring that the views in its hierarchy are all measured and laid out properly by the time its layout process is done. A previous fix to the request-during-layout issue attempted to distinguish the correct from incorrect behavior by checking whether views had been properly laid out since the requestLayout() call, and making sure the views were visible in the hierarchy (parented, attached, and !GONE), since otherwise the views would not be laid out, the flags wouldn't be cleared, and requests are superfluous anyway. However, this logic only checked whether the requesting views were GONE, whereas the check should include the entire parent hierarchy of the views (since a view with a GONE parent is still not visible to the user). This fix adds that additional check and cleans up other parts of the previous code, such as not bothering to post() requests that occur during the second layout pass unless those requests are also valid (coming from visible views). Issue #8370042 Path seems to be in an infinite layout loop Change-Id: I7aaf701229adfeee349a9a7c9ec14585735ba9f6
Loading
Please register or sign in to comment