RecyclerView # onMeasure () did not set the measured dimension by calling setMeasuredDimension ()

I have a snippet with a Recyclerview attached to a LinearSnapHelper to get the view in the center and highlight it by increasing its size.

it works fine, but when this snippet is pulled from the backstack when back is pressed, it throws the following exception.

E/UncaughtException: java.lang.IllegalStateException: View with id 2131689939: android.support.v7.widget.RecyclerView#onMeasure() did not set the measured dimension by calling setMeasuredDimension()
                                                                     at android.view.View.measure(View.java:19746)
                                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120)
                                                                     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
                                                                     at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1117)
                                                                     at android.widget.LinearLayout.onMeasure(LinearLayout.java:642)
                                                                     at android.view.View.measure(View.java:19734)
                                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120)
                                                                     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
                                                                     at android.widget.LinearLayout.measureVertical(LinearLayout.java:758)
                                                                     at android.widget.LinearLayout.onMeasure(LinearLayout.java:640)
                                                                     at android.view.View.measure(View.java:19734)
                                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120)
                                                                     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
                                                                     at android.widget.LinearLayout.measureVertical(LinearLayout.java:758)
                                                                     at android.widget.LinearLayout.onMeasure(LinearLayout.java:640)
                                                                     at android.view.View.measure(View.java:19734)
                                                                     at android.support.v4.widget.NestedScrollView.measureChildWithMargins(NestedScrollView.java:1420)
                                                                     at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
                                                                     at android.support.v4.widget.NestedScrollView.onMeasure(NestedScrollView.java:482)
                                                                     at android.view.View.measure(View.java:19734)
                                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120)
                                                                     at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
                                                                     at android.view.View.measure(View.java:19734)
                                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120)
                                                                     at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:714)
                                                                     at android.support.design.widget.HeaderScrollingViewBehavior.onMeasureChild(HeaderScrollingViewBehavior.java:90)
                                                                     at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onMeasureChild(AppBarLayout.java:1391)
                                                                     at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:784)
                                                                     at android.view.View.measure(View.java:19734)
                                                                     at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:1081)
                                                                     at android.view.View.measure(View.java:19734)
                                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120)
                                                                     at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
                                                                     at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
                                                                     at android.view.View.measure(View.java:19734)
                                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120)
                                                                     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
                                                                     at android.widget.LinearLayout.measureVertical(LinearLayout.java:758)
                                                                     at android.widget.LinearLayout.onMeasure(LinearLayout.java:640)
                                                                     at android.view.View.measure(View.java:19734)
                                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120)
                                                                     at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
                                                                     at android.view.View.measure(View.java:19734)
                                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120)
                                                                     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
                                                                     at android.widget.LinearLayout.measureVertical(LinearLayout.java:758)
                                                                     at android.widget.LinearLayout.onMeasure(LinearLayout.java:640)
                                                                     at android.view.View.measure(View.java:19734)
                                                                     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120)
                                                                     at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
                                                                     at com.android.internal.policy.DecorView.onMeasure(DecorView.java:687)
                                                                     at android.view.View.measure(View.java:19734)
                                                                     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2271)
                                                                     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1358)
                                                                     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1607)

      

Corresponding code for the utility

https://gist.githubusercontent.com/anonymous/81a2ae091ded158839b6353ddb03163f/raw/1aff18064d4de4e42b79aa50ff8d44bd6df365a9/Main.java

+7


source to share


3 answers


I think this is because we are calling RecyclerView.setLayoutManager()

with LayoutManager

which already has RecyclerView

.

public void setLayoutManager(LayoutManager layout) {
    ...
    if (layout != null) {
        if (layout.mRecyclerView != null) {
            throw new IllegalArgumentException("LayoutManager " + layout
                    + " is already attached to a RecyclerView:"
                    + layout.mRecyclerView.exceptionLabel());
        }
        mLayout.setRecyclerView(this);
        if (mIsAttached) {
            mLayout.dispatchAttachedToWindow(this);
        }
    }
    ...
}

      

But for a reason I don't understand, the exception that is printed in Logcat is



UncaughtException: java.lang.IllegalStateException: View with id 2131231433: android.support.v7.widget.RecyclerView#onMeasure() did not set the measured dimension by calling setMeasuredDimension()'

      

Maybe something is catching this exception and throwing it (for no reason)?

+6


source


I solved it just by calling mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

and it worked, hope this helps someone.



0


source


Ok, I just fixed this as @Kevin Robatel mentioned. In my case, I initialized the layout manager only once in onCreate () and then used either onViewCreated () or onResume () (i.e. in multiple places).

So the fix is ​​to " re-initialize the layout manager every time you need to install the layout manager ."

This is for me too, hurray!

0


source







All Articles