用recycleView封裝成可擴展列表 點擊父佈局時報數組越界錯誤

錯誤:

java.lang.ArrayIndexOutOfBoundsException: length=61; index=-1

at android.text.StaticLayout.calculateEllipsis(StaticLayout.java:805)

at android.text.StaticLayout.out(StaticLayout.java:724)
at android.text.StaticLayout.generate(StaticLayout.java:432)
at android.text.StaticLayout.<init>(StaticLayout.java:144)
at android.widget.TextView.makeSingleLayout(TextView.java:5973)
at android.widget.TextView.makeNewLayout(TextView.java:5830)
at android.widget.TextView.onMeasure(TextView.java:6187)
at android.view.View.measure(View.java:15367)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4924)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1420)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:697)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:578)
at android.view.View.measure(View.java:15367)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:622)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:404)
at android.view.View.measure(View.java:15367)
at android.support.v7.widget.RecyclerView$LayoutManager.measureChildWithMargins(RecyclerView.java:7487)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1416)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1353)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:574)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3028)
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:2625)
at android.view.View.measure(View.java:15367)
at android.widget.RelativeLayout.measureChild(RelativeLayout.java:607)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:420)
at android.view.View.measure(View.java:15367)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:622)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:404)
at android.view.View.measure(View.java:15367)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1560)
at android.view.View.measure(View.java:15367)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:622)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:404)
at android.view.View.measure(View.java:15367)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:622)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:404)
at android.view.View.measure(View.java:15367)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4924)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:314)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
at android.view.View.measure(View.java:15367)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4924)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1420)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:697)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:578)
at android.view.View.measure(View.java:15367)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4924)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:314)
at android.view.View.measure(View.java:15367)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4924)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1420)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:697)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:578)
at android.view.View.measure(View.java:15367)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4924)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:314)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2154)
at android.view.View.measure(View.java:15367)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1863)

正如所看到的樣子,沒有提示到我寫的代碼的具體哪一行,只知道是View測量的時候報錯,並且報的是數組越界錯誤一時間很難找到出錯的地方在哪。於是我開始了百度之旅,翻了我幾個小時的百度,終於在stackoverflow找到了答案!

附上原文鏈接:

http://stackoverflow.com/questions/17047172/android-java-lang-arrayindexoutofboundsexception-length-10-index-10


看到這個的時候一頭黑人懵逼臉,這不是設置textView是否爲單行的屬性麼?並且android:singleLine="true"這個屬性已經被谷歌廢棄了(說不上來是哪個版本,現在使用AS 2.2.3 在xml裏就會出現廢棄橫槓)再往下看:


看到這個我才恍然大悟,16以上的版本使用android:maxLines="1"這個屬性就直接給他加上android:singleLine="true"這個,也就是說android16之前的手機不能只設置android:maxLines="1",必須設置android:singleLine="true"才能達到只顯示一行的效果,這真是深坑啊!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章