RecyclerView#onMeasure()没有通过调用setMeasuredDimension()来设置测量的维度

Gur*_*aur 7 android fragment dimension onmeasure android-recyclerview

我有一个带有Recyclerview的片段,附有LinearSnapHelper,以便在中心获取视图并通过缩放其大小来突出显示它.

它运行正常,但是当从背板上弹出这个片段时,它会抛出异常.

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)
Run Code Online (Sandbox Code Playgroud)

recyclerview的相关代码如下

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

Kev*_*tel 6

我认为,这是因为我们调用RecyclerView.setLayoutManager()LayoutManager已经有一个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);
        }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是由于我不明白的原因,Logcat中打印的异常是

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

也许有些东西捕捉到了这个异常并抛出了这个异常(没有原因)?