我有一個舊版 Xamarin 表單應用程式,我正在嘗試將一個選項卡式頁面添加到該應用程式中作為根頁面。這就是我的標簽頁 xaml 的樣子——
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:ChildPage1="clr-namespace:sampleApp;assembly=sampleAssembly">
<NavigationPage Title="Items" IconImageSource="icon_items_tab.png">
<x:Arguments>
<ChildPage1:ItemListPage BindingContext="{Binding ItemListTabVM}" />
</x:Arguments>
</NavigationPage>
<ContentPage Title="Messages" IconImageSource="icon_messages_tab.png" />
<ContentPage Title="Search" IconImageSource="icon_search_tab.png" />
</TabbedPage>
當我運行該應用程式時,我收到以下未處理的例外-
Android.Views.InflateException: Binary XML file line #1 in com.sample.xamarinapp:layout/toolbar: Binary XML file line #1 in com.sample.xamarinapp:layout/toolbar: Error inflating class <unknown>
以下是我從執行緒中提取的內部例外詳細資訊-
System.Diagnostics.Debugger.Mono_UnhandledException_internal()
in System.Diagnostics.Debugger.Mono_UnhandledException_internal
in System.Diagnostics.Debugger.Mono_UnhandledException at /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/corlib/System.Diagnostics/Debugger.cs:125,4
in Android.Runtime.DynamicMethodNameCounter.104
in System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw at /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:157,13
in Java.Interop.JniEnvironment.InstanceMethods.CallObjectMethod
in Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeVirtualObjectMethod
in Android.Views.LayoutInflater.Inflate at /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/obj/Release/monoandroid10/android-29/mcw/Android.Views.LayoutInflater.cs:661,5
in Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer.SetupToolbar at D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\NavigationPageRenderer.cs:789,5
in Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer.OnElementChanged at D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\NavigationPageRenderer.cs:347,6
in Xamarin.Forms.Platform.Android.VisualElementRenderer<Xamarin.Forms.NavigationPage>.SetElement at D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:241,4
in Xamarin.Forms.Platform.Android.VisualElementRenderer<Xamarin.Forms.NavigationPage>.Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement at D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:131,4
in Xamarin.Forms.Platform.Android.Platform.CreateRenderer at D:\a\1\s\Xamarin.Forms.Platform.Android\Platform.cs:404,4
in Xamarin.Forms.Platform.Android.AppCompat.FragmentContainer.OnCreateView at D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\FragmentContainer.cs:57,5
in AndroidX.Fragment.App.Fragment.n_OnCreateView_Landroid_view_LayoutInflater_Landroid_view_ViewGroup_Landroid_os_Bundle_ at D:\a\1\s\generated\androidx.fragment.fragment\obj\Release\monoandroid9.0\generated\src\AndroidX.Fragment.App.Fragment.cs:1977,4
in Android.Runtime.DynamicMethodNameCounter.104
in Java.Interop.NativeMethods.java_interop_jnienv_call_nonvirtual_void_method_a
in Java.Interop.JniEnvironment.InstanceMethods.CallNonvirtualVoidMethod
in Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeNonvirtualVoidMethod
in Android.Views.View.Measure at /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/obj/Release/monoandroid10/android-29/mcw/Android.Views.View.cs:16637,5
in Xamarin.Forms.Platform.Android.AppCompat.TabbedPageRenderer.OnLayout at D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\TabbedPageRenderer.cs:398,5
in Xamarin.Forms.Platform.Android.FormsViewGroup.n_OnLayout_ZIIII at D:\a\1\s\Xamarin.Forms.Platform.Android.FormsViewGroup\obj\Release\generated\src\Xamarin.Forms.Platform.Android.FormsViewGroup.cs:206,4
in Android.Runtime.DynamicMethodNameCounter.40
in Java.Interop.NativeMethods.java_interop_jnienv_call_nonvirtual_void_method_a
in Java.Interop.JniEnvironment.InstanceMethods.CallNonvirtualVoidMethod
in Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeVirtualVoidMethod
in Xamarin.Forms.Platform.Android.FormsViewGroup.MeasureAndLayout at D:\a\1\s\Xamarin.Forms.Platform.Android.FormsViewGroup\obj\Release\generated\src\Xamarin.Forms.Platform.Android.FormsViewGroup.cs:189,5
in Xamarin.Forms.Platform.Android.VisualElementTracker.UpdateLayout at D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementTracker.cs:111,5
in Xamarin.Forms.Platform.Android.VisualElementRenderer<Xamarin.Forms.TabbedPage>.UpdateLayout at D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:139,4
in Xamarin.Forms.Platform.Android.AppCompat.Platform.Xamarin.Forms.Platform.Android.IPlatformLayout.OnLayout at D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\Platform.cs:235,4
in Xamarin.Forms.Platform.Android.PlatformRenderer.OnLayout at D:\a\1\s\Xamarin.Forms.Platform.Android\PlatformRenderer.cs:78,4
in Android.Views.ViewGroup.n_OnLayout_ZIIII at /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/obj/Release/monoandroid10/android-29/mcw/Android.Views.ViewGroup.cs:3612,4
in Android.Runtime.DynamicMethodNameCounter.34
如果我洗掉 NavigationPage 包裝器并將 ItemList 子頁面放置為內容頁面,則應用程式可以正常作業。當子頁面包裝在導航頁面中時,為什么會拋出例外?提前感謝您的幫助。我正在使用 VS 2019,XF 5.0.0.2244
uj5u.com熱心網友回復:
首先需要在TabbedPage中添加頁面的參考,如:
xmlns:local="clr-namespace:TabbedPageWithNavigationPage;assembly=TabbedPageWithNavigationPage"
然后在 NavigationPage 包裝器中使用它的參考,例如:
<NavigationPage Title="Schedule" IconImageSource="schedule.png">
<x:Arguments>
<local:SchedulePage />
</x:Arguments>
</NavigationPage>
如果您需要更多資訊,請查看官方檔案以了解如何使用 NavigationPage 包裝器:https ://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/navigation/tabbed-page
uj5u.com熱心網友回復:
好吧,經過一段時間,我終于解決了這個問題。這是我所做的 - 在我在問題中分享的內部錯誤資訊中,提到了“Xamarin.Forms.Platform.Android.PlatformRenderer.OnLayout”。因此,我使用 TabbedPageRenderer 創建了一個自定義渲染器,并創建了對“OnLayout()”的覆寫。當我運行代碼時,我在 base.OnLayout(changed, left, top, right, bottom) 處得到了相同的例外,但這次有更多資訊和堆疊跟蹤。堆疊跟蹤顯示實際錯誤 -
java.lang.UnsupportedOperationException: Failed to resolve attribute at index 37: TypedValue{t=0x2/d=0x7f030007 a=6} at android.content.res.TypedArray.getDimensionPixelSize(TypedArray.java:781) at android.view.View.<init>(View.java:5522)
所以,我對這個特定的例外進行了搜索,這篇文章給了我一些想法。我在資源/布局下添加了一個 Toolbar.xml。我洗掉了我們通常在 Toolbar.xml 中找到的以下主題。
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" android:popupTheme="@style/ThemeOverlay.AppCompat.Light"
之后,我的應用程式開始作業。選項卡顯示導航頁面沒有任何問題。
順便說一句,我使用了此處的 Toolbar.xml 內容。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/487698.html
