设置Android的底部标签式导航时,应用程序崩溃

时间:2020-05-10 13:46:50

标签: c# android xamarin.forms xamarin.android crash

我在Xamarin Forms中遇到一个奇怪的问题,无法找到解决方案。 我正在尝试使用以下代码制作底部的标签页:

using Xamarin.Forms.PlatformConfiguration.AndroidSpecific;
On<Xamarin.Forms.PlatformConfiguration.Android>().SetToolbarPlacement(ToolbarPlacement.Bottom);

并且我收到导致崩溃的错误:

crc64720bb2db43a66fe9.FragmentContainer.onCreateView
FragmentContainer.java, line 33
Android.Content.Res.Resources+NotFoundException: Resource ID #0x0

堆栈跟踪

JniEnvironment+InstanceMethods.CallNonvirtualVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniObjectReference type, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args)
    JniPeerMembers+JniInstanceMethods.FinishCreateInstance (System.String constructorSignature, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters)
    Android.Support.Design.Widget.BottomNavigationView..ctor (Android.Content.Context context) [0x0007a] in <2899ffe2b3534c2b9c09eb66776436ae>:0
    TabbedPageRenderer.OnElementChanged (Xamarin.Forms.Platform.Android.ElementChangedEventArgs`1[TElement] e) D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\TabbedPageRenderer.cs:286
    VisualElementRenderer`1[TElement].SetElement (TElement element) D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:240
    IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:133
    Platform.CreateRenderer (Xamarin.Forms.VisualElement element, Android.Support.V4.App.FragmentManager fragmentManager, Android.Content.Context context) D:\a\1\s\Xamarin.Forms.Platform.Android\Platform.cs:397
    FragmentContainer.OnCreateView (Android.Views.LayoutInflater inflater, Android.Views.ViewGroup container, Android.OS.Bundle savedInstanceState) D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\FragmentContainer.cs:64
    Fragment.n_OnCreateView_Landroid_view_LayoutInflater_Landroid_view_ViewGroup_Landroid_os_Bundle_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_inflater, System.IntPtr native_container, System.IntPtr native_savedInstanceState)
    (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.60(intptr,intptr,intptr,intptr,intptr)
    android.content.res.Resources$NotFoundException: Resource ID #0x0
    android.content.res.ResourcesImpl.getValue ResourcesImpl.java:237
    android.content.res.Resources.getColorStateList Resources.java:1052
    android.content.Context.getColorStateList Context.java:703
    android.support.v7.content.res.AppCompatResources.getColorStateList AppCompatResources.java:67
    android.support.design.internal.BottomNavigationMenuView.createDefaultColorStateList BottomNavigationMenuView.java:467
    android.support.design.internal.BottomNavigationMenuView.<init> BottomNavigationMenuView.java:101
    android.support.design.internal.BottomNavigationMenuView.<init> BottomNavigationMenuView.java:86
    android.support.design.widget.BottomNavigationView.<init> BottomNavigationView.java:123
    android.support.design.widget.BottomNavigationView.<init> BottomNavigationView.java:114
    android.support.design.widget.BottomNavigationView.<init> BottomNavigationView.java:110
    crc64720bb2db43a66fe9.FragmentContainer.n_onCreateView(Native Method)
    crc64720bb2db43a66fe9.FragmentContainer.onCreateView FragmentContainer.java:33
    android.support.v4.app.Fragment.performCreateView Fragment.java:2439
    android.support.v4.app.FragmentManagerImpl.moveToState FragmentManager.java:1460
    android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState FragmentManager.java:1784
    android.support.v4.app.FragmentManagerImpl.moveToState FragmentManager.java:1852
    android.support.v4.app.BackStackRecord.executeOps BackStackRecord.java:802
    android.support.v4.app.FragmentManagerImpl.executeOps FragmentManager.java:2625
    android.support.v4.app.FragmentManagerImpl.executeOpsTogether FragmentManager.java:2411
    android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute FragmentManager.java:2366
    android.support.v4.app.FragmentManagerImpl.execPendingActions FragmentManager.java:2273
    android.support.v4.app.FragmentManagerImpl.executePendingTransactions FragmentManager.java:814
    crc64720bb2db43a66fe9.MasterDetailContainer.n_onAttachedToWindow(Native Method)
    crc64720bb2db43a66fe9.MasterDetailContainer.onAttachedToWindow MasterDetailContainer.java:62
    android.view.View.dispatchAttachedToWindow View.java:19553
    android.view.ViewGroup.dispatchAttachedToWindow ViewGroup.java:3430
    android.view.ViewGroup.dispatchAttachedToWindow ViewGroup.java:3437
    android.view.ViewGroup.addViewInner ViewGroup.java:5149
    android.view.ViewGroup.addView ViewGroup.java:4935
    android.view.ViewGroup.addView ViewGroup.java:4875
    android.view.ViewGroup.addView ViewGroup.java:4848
    mono.java.lang.RunnableImplementor.n_run(Native Method)
    mono.java.lang.RunnableImplementor.run RunnableImplementor.java:30
    android.os.Handler.handleCallback Handler.java:883
    android.os.Handler.dispatchMessage Handler.java:100
    android.os.Looper.loop Looper.java:214
    android.app.ActivityThread.main ActivityThread.java:7356
    java.lang.reflect.Method.invoke(Native Method)
    com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run RuntimeInit.java:492
    com.android.internal.os.ZygoteInit.main ZygoteInit.java:930

当我移除SetToolbarPlacement(ToolbarPlacement.Bottom)时,它将选项卡式页面置于顶部。

一些库:

   <PackageReference Include="Xamarin.Forms" Version="4.6.0.726" />
    <PackageReference Include="Xamarin.Android.Support.Design" Version="28.0.0.3" />
    <PackageReference Include="Xamarin.Android.Support.v7.AppCompat" Version="28.0.0.3" />
    <PackageReference Include="Xamarin.Android.Support.v4" Version="28.0.0.3" />
    <PackageReference Include="Xamarin.Android.Support.v7.CardView" Version="28.0.0.3" />
    <PackageReference Include="Xamarin.Android.Support.v7.MediaRouter" Version="28.0.0.3" />
    <PackageReference Include="Xamarin.Android.Support.Core.Utils" Version="28.0.0.3" />
    <PackageReference Include="Xamarin.Android.Support.CustomTabs" Version="28.0.0.3" />

以前有人遇到过此错误吗?

编辑: MainActivity代码:

using System;
using System.Net;
using Rg.Plugins.Popup;
using Acr.UserDialogs;
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
using Android.Security;
using FreshMvvm;
using Y.Contracts.Services.General;
using Y.Dependencies;
using Y.PageModels;
using Java.Lang;
using Microsoft.AppCenter.Crashes;
using Plugin.Permissions;
using Y.Droid.AndroidDependencies;
using Y.Helpers;
using Xamarin.Forms;
using Exception = Java.Lang.Exception;
using Process = Android.OS.Process;

namespace RPMobile.Droid
{
    [Activity(Label = "x", Theme = "@style/MyTheme.Splash", LaunchMode = LaunchMode.SingleTop, MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation, ScreenOrientation = ScreenOrientation.Portrait)]
    public class MainActivity : Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        static readonly string CHANNEL_ID = "x Notifications";
        internal static MainActivity Instance { get; private set; }

        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;
            JavaSystem.LoadLibrary("runtimecore");
            base.OnCreate(savedInstanceState);
            Instance = this;
            Popup.Init(this, savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            UserDialogs.Init(this);
            Forms.Init(this, savedInstanceState);
            FormsMaterial.Init(this, savedInstanceState);
            Plugin.CurrentActivity.CrossCurrentActivity.Current.Init(this, savedInstanceState);
            ServicePointManager.ServerCertificateValidationCallback += (o, cert, chain, errors) => true;
            CreateNotificationChannel();
            LoadApplication(new App());
        }

        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
        {
            PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        }

        void CreateNotificationChannel()
        {
            if (Build.VERSION.SdkInt < BuildVersionCodes.O)
            {
                // Notification channels are new in API 26 (and not a part of the
                // support library). There is no need to create a notification
                // channel on older versions of Android.
                return;
            }

            var channelName = "x";
            var channelDescription = "Notification Channel for x";
            var channel = new NotificationChannel(CHANNEL_ID, channelName, NotificationImportance.Default)
            {
                Description = channelDescription
            };
            channel.SetVibrationPattern(new long[] { 0 });
            channel.EnableVibration(true);
            channel.SetSound(null, null);
            var notificationManager = (NotificationManager)GetSystemService(NotificationService);
            notificationManager.CreateNotificationChannel(channel);
        }
        protected override void OnDestroy()
        {
            if (TempCacheClass.Instance.ArcGisFeatureSessionOnline != null || TempCacheClass.Instance.ArcGisFeatureSessionOffline != null)
            {
                IGeolocationForegroundService geolocation = new GeolocationService();
                geolocation.StopService();
                base.OnDestroy();
                Process.KillProcess(Process.MyPid());
            }
        }
    }
}

编辑: 添加了TabbedPage xaml

<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             x:Class="Y.Views.TabbedPage1View"
             xmlns:views="clr-namespace:Y.Views;assembly=Y">
  <!--Pages can be added as references or inline-->
    <views:OfflineMapsListView IconImageSource="OfflineMap.png"/>
    <views:DownloadView IconImageSource="Download.png"/>
</TabbedPage>

即使我将标志放在此TabbedPage中也会崩溃

xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
            android:TabbedPage.ToolbarPlacement="Bottom"

0 个答案:

没有答案