2016-11-02 5 views
2

저는 Xamarin.Forms와 관련이 있습니다. 특히 안드로이드의 TabbedPage와 관련이 있습니다.Xamarin.Forms 안드로이드 StackOverflowError with TabbedPage

4 ContentPage가 포함 된 TabbedPage를 만들었습니다. 각 ContentPage에는 사용자 지정 ItemTemplate이있는 ListView (XAML에서 50 줄 이상)가 포함되어 있습니다. 그것은 iOS에서가 아니라 안드로이드에 벌금을 일하고 난이 예외받은 : 나는이 같은 문제 https://forums.xamarin.com/discussion/48144/stackoverflowerror-on-android을 발견하지만 해결 방법은 (내가를 줄일 수 없습니다 내 경우에는 적용 할 수 없습니다 구글에 대한 몇 가지 연구 후

Java.Lang.StackOverflowError: 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c] in /Users/builder/data/lanes/3819/96c7ba6c/source/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143 
    at Java.Interop.JniEnvironment+InstanceMethods.CallNonvirtualVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniObjectReference type, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x000a7] in /Users/builder/data/lanes/3819/96c7ba6c/source/Java.Interop/src/Java.Interop/Java.Interop/JniEnvironment.g.cs:12083 
    at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x00068] in /Users/builder/data/lanes/3819/96c7ba6c/source/Java.Interop/src/Java.Interop/Java.Interop/JniPeerMembers.JniInstanceMethods_Invoke.cs:31 
    at Android.Views.View.Draw (Android.Graphics.Canvas canvas) [0x0002c] in /Users/builder/data/lanes/3819/96c7ba6c/source/monodroid/src/Mono.Android/platforms/android-24/src/generated/Android.Views.View.cs:12837 
    at Xamarin.Forms.Platform.Android.ScrollViewRenderer.Draw (Android.Graphics.Canvas canvas) [0x0000d] in C:\BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\Renderers\ScrollViewRenderer.cs:99 
    at Android.Views.View.n_Draw_Landroid_graphics_Canvas_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_canvas) [0x00011] in /Users/builder/data/lanes/3819/96c7ba6c/source/monodroid/src/Mono.Android/platforms/android-24/src/generated/Android.Views.View.cs:12825 
    at at (wrapper dynamic-method) System.Object:75413b68-d1a4-4864-b7a4-6d3fd2662bd8 (intptr,intptr,intptr) 
    at java.lang.StackOverflowError 
    at at android.graphics.Paint.getTextRunAdvances(Paint.java:2221) 
    at at android.text.TextLine.handleText(TextLine.java:815) 
    at at android.text.TextLine.handleRun(TextLine.java:970) 
    at at android.text.TextLine.measureRun(TextLine.java:482) 
    at at android.text.TextLine.measure(TextLine.java:361) 
    at at android.text.TextLine.metrics(TextLine.java:335) 
    at at android.text.Layout.getLineExtent(Layout.java:1001) 
    at at android.text.Layout.drawText(Layout.java:332) 
    at at android.text.Layout.draw(Layout.java:208) 
    at at android.text.BoringLayout.draw(BoringLayout.java:403) 
    at at android.widget.TextView.onDraw(TextView.java:6286) 
    at at android.view.View.draw(View.java:15312) 
    at at android.view.View.getDisplayList(View.java:14206) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.getDisplayList(View.java:14201) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.getDisplayList(View.java:14201) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.getDisplayList(View.java:14201) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.getDisplayList(View.java:14201) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.getDisplayList(View.java:14201) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.getDisplayList(View.java:14201) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.getDisplayList(View.java:14201) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.widget.ListView.drawChild(ListView.java:3403) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.widget.AbsListView.dispatchDraw(AbsListView.java:2931) 
    at at android.widget.ListView.dispatchDraw(ListView.java:3398) 
    at at android.view.View.draw(View.java:15315) 
    at at android.widget.AbsListView.draw(AbsListView.java:5153) 
    at at android.view.View.getDisplayList(View.java:14206) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3151) 
    at at android.view.View.draw(View.java:15315) 
    at at android.view.View.getDisplayList(View.java:14206) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.draw(View.java:15315) 
    at at android.view.View.getDisplayList(View.java:14206) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.draw(View.java:15315) 
    at at android.view.View.getDisplayList(View.java:14206) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.getDisplayList(View.java:14201) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.draw(View.java:15315) 
    at at android.widget.FrameLayout.draw(FrameLayout.java:472) 
    at at android.view.View.getDisplayList(View.java:14206) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.draw(View.java:15315) 
    at at android.view.View.getDisplayList(View.java:14206) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.getDisplayList(View.java:14201) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.getDisplayList(View.java:14201) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.draw(View.java:15315) 
    at at android.widget.FrameLayout.draw(FrameLayout.java:472) 
    at at android.widget.ScrollView.draw(ScrollView.java:2156) 
    at at md5b60ffeb829f638581ab2bb9b1a7f4f3f.ScrollViewRenderer.n_draw(Native Method) 
    at at md5b60ffeb829f638581ab2bb9b1a7f4f3f.ScrollViewRenderer.draw(ScrollViewRenderer.java:59) 
    at at android.view.View.getDisplayList(View.java:14206) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3151) 
    at at android.view.View.draw(View.java:15315) 
    at at android.view.View.getDisplayList(View.java:14206) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.getDisplayList(View.java:14201) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.draw(View.java:15315) 
    at at android.view.View.getDisplayList(View.java:14206) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.getDisplayList(View.java:14201) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.draw(View.java:15315) 
    at at android.support.v4.view.ViewPager.draw(ViewPager.java:2336) 
    at at android.view.View.getDisplayList(View.java:14206) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.getDisplayList(View.java:14201) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.getDisplayList(View.java:14201) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.getDisplayList(View.java:14201) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.getDisplayList(View.java:14201) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.getDisplayList(View.java:14201) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.draw(View.java:15315) 
    at at android.widget.FrameLayout.draw(FrameLayout.java:472) 
    at at android.view.View.getDisplayList(View.java:14206) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.getDisplayList(View.java:14201) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.getDisplayList(View.java:14201) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.getDisplayList(View.java:14201) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.View.draw(View.java:15026) 
    at at android.view.ViewGroup.drawChild(ViewGroup.java:3307) 
    at at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3144) 
    at at android.view.View.draw(View.java:15315) 
    at at android.widget.FrameLayout.draw(FrameLayout.java:472) 
    at at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2540) 
    at at android.view.View.getDisplayList(View.java:14206) 
    at at android.view.View.getDisplayList(View.java:14248) 
    at at android.view.HardwareRenderer$GlRenderer.buildDisplayList(HardwareRenderer.java:1570) 
    at at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1449) 
    at at android.view.ViewRootImpl.draw(ViewRootImpl.java:2667) 
    at at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2533) 
    at at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2107) 
    at at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1200) 
    at at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6401) 
    at at android.view.Choreographer$CallbackRecord.run(Choreographer.java:803) 
    at at android.view.Choreographer.doCallbacks(Choreographer.java:603) 
    at at android.view.Choreographer.doFrame(Choreographer.java:573) 
    at at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:789) 
    at at android.os.Handler.handleCallback(Handler.java:733) 
    at at android.os.Handler.dispatchMessage(Handler.java:95) 
    at at android.os.Looper.loop(Looper.java:157) 
    at at android.app.ActivityThread.main(ActivityThread.java:5335) 
    at at java.lang.reflect.Method.invokeNative(Native Method) 
    at at java.lang.reflect.Method.invoke(Method.java:515) 
    at at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
    at at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
    at at dalvik.system.NativeStart.main(Native Method) 

을 내 itemtemplate의 라인 수). 그러나 문제의 원인은 ItemTemplate의 요소 수입니다. 동일한 ContentPage가 Android의 MasterDetailPage에서 정상적으로 작동하기 때문입니다.

TabbedPage를 사용할 수없는 경우, 샘플을 사용하여 Xamarin.Forms에서 TabBar를 만들 수 있습니다.

도움을 주셔서 감사합니다. 감사합니다. 올리비에.

+0

테스트 할 장치/시뮬레이터는 무엇입니까? 코드를 어딘가에 둘 수있어 재현을 시도 할 수 있습니까? –

+1

@ 유리 당신의 대답에 감사드립니다. 내 문제를 발견, 우리가 NavigationPage 내에 Tabbed를 만들 때 나타납니다. 나는 우리가 TabbedPage를 포함하는 탐색 페이지를 만들 수 없다고 생각한다. iOS에서는 작동하지만 Android에서는 작동하지 않습니다. 내 TabbedPage의 각 하위 페이지에 대해 NavigationPage를 만드는 것이 좋습니다. Thx – user1317878

+0

나는이 같은 오류가 있었는데 내 listview itemtemplate 레이아웃 요소의 수를 줄임으로써 그것을 해결했습니다. rowspan 및 columnspan과 함께 그리드를 사용하여 레이아웃을보다 효율적으로 만들 것을 제안합니다. –

답변

0

Tabbed에서 ScrollView에 ListView를 래핑 시켰을 때도 같은 문제가있었습니다. 이 레이아웃에서 ScrollView를 제거해야합니다. ListView 자체 내부 스크롤이 있기 때문에