2017-07-18 57 views
3

我有一個Recyclerview附帶LinearSnapHelper的片段,以便在中心獲取視圖並通過縮放它的大小來突出顯示它。RecyclerView#onMeasure()沒有通過調用setMeasuredDimension()設置測量尺寸

它工作的很好,但是當從後臺按下這個片段時,它會拋出以下異常。

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) 

爲recyclerview的初步認識代碼爲

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

+0

找不到東西? –

回答

2

我的事情,這是因爲我們稱之爲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); 
     } 
    } 
    ... 
} 

但對於原因,我不明白,在logcat中打印的例外是代替(不原因

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

也許一些捕獲該異常和拋出這一個?

+0

是的。佈局管理器需要重新初始化。謝謝 !! –