System.InvalidOperationException: 'Невозможно назначить собственный элемент управления без элемента; Исключение в формах Xamarin - PullRequest
0 голосов
/ 25 апреля 2020

Я хочу интегрировать Microsoft Ads в свой проект Xamarin.Forms. Я реализовал рекламу Microsoft, как показано в этом уроке Джеймса Монтемагно . Я добавил рекламный баннер на 2 страницах. Баннерная реклама показывается на первой и второй странице. Сначала реклама показывается на первой странице при запуске приложения, затем при переходе на вторую страницу показывается реклама. Но как только я возвращаюсь на первую страницу со страницы второй страницы, я получаю эту ошибку

System.InvalidOperationException: 'Cannot assign a native control without an Element; Renderer unbound and/or disposed. Please consult Xamarin.Forms renderers for reference implementation of OnElementChanged.'

Я также сослался на этот ответ в Stackoverflow . Когда я реализовал код в ответе, приведенном здесь, я не получаю никакого объявления на первой странице при возвращении со второй страницы.

Вот мой код:

[assembly: ExportRenderer(typeof(MicrosoftBannerAdControlView), typeof(MicrosoftBannerAdsImplementation))]
namespace AdExampleApp.UWP.PlatformSpecific.MicrosoftAdsImplementation
{
    public class MicrosoftBannerAdsImplementation : ViewRenderer<Controls.AdsControl.MicrosoftAds.MicrosoftBannerAdControlView, AdControl>
    {
        string bannerId = "test";
        AdControl adView;
        string applicationId = "3f83fe91-d6be-434d-a0ae-7351c5a997f1";
        bool isRegist = false;

        protected override void OnElementChanged(ElementChangedEventArgs<MicrosoftBannerAdControlView> e)
        {
            base.OnElementChanged(e);

            if (Control == null && isRegist != true)
            {
                CreateNativeAdControl();
                SetNativeControl(adView);     // I am getting the ERROR Here
                isRegist = true;
            }
        }

        void CreateNativeAdControl()
        {
            if (adView != null)
                return;
            var width = 300;
            var height = 50;
            if (AnalyticsInfo.VersionInfo.DeviceFamily == "Windows.Desktop")
            {
                width = 728;
                height = 90;
            }
            adView = new AdControl
            {
                ApplicationId = applicationId,
                AdUnitId = bannerId,
                HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Center,
                VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Bottom,
                Height = height,
                Width = width
            };
        }
    }
}

Вот мой XAML-код первой страницы

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             ....
             xmlns:MicrosoftAds="clr-namespace:AdExampleApp.Controls.AdsControl.MicrosoftAds">

    <ContentPage.Content>
        <StackLayout>
            <Button Text="Go To Page 2" Clicked="GoToPage2" />
            <MicrosoftAds:MicrosoftBannerAdControlView x:Name="MicrosoftBannerAd" VerticalOptions="EndAndExpand" />
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

Я аналогичным образом реализовал Microsoft Ads на второй странице. На первой и второй странице показывается реклама, но когда я go возвращаюсь со второй страницы на первую страницу, я получаю сообщение об ошибке.

...