UPP AdControl пусто после PopAsync в формах Xamarin - PullRequest
0 голосов
/ 26 апреля 2018

Проект Xamarin Forms с использованием рекламного контроля Microsoft.Элемент управления работает нормально, когда страница открыта, но когда страница снова отображается после PopAsync страницы поверх нее, AdControl остается пустым и остается пустым после этого.

Я нашел старый вопрос, по-видимому, на ту же тему здесь , но я не могу использовать ответы и комментарии.

Когда страница с AdControlвновь появляется после PopAsync страницы поверх него, e.NewElement имеет значение null, а e.OldElement имеет AdControlView (мой пользовательский вид в PCL).

Средство визуализации UWP:

public class AdViewRenderer : ViewRenderer<AdControlView, UWPAdView>
{
    protected override void OnElementChanged(ElementChangedEventArgs<AdControlView> e)
    {
        base.OnElementChanged(e);

        if (null == Control && e.NewElement != null)
        {
            UWPAdView ad = new UWPAdView();
            SetNativeControl(ad);
        }
    }
}

Пользовательский элемент управления AdControl в проекте UWP:

<UserControl
    x:Class="Sample.UWP.Helpers.UWPAdView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:aduwp="using:Microsoft.Advertising.WinRT.UI"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    d:DesignHeight="300"
    d:DesignWidth="400"
    mc:Ignorable="d">

    <Grid>
        <aduwp:AdControl
            Width="640"
            Height="100"
            HorizontalAlignment="Stretch"
            AdUnitId="myadunitid"
            ApplicationId="myappid"
            AutoRefreshIntervalInSeconds="30"
            ErrorOccurred="AdControl_ErrorOccurred"
            IsAutoRefreshEnabled="True" />
    </Grid>
</UserControl>

Кто-нибудь использует AdControl в производственном приложении Xamarin Forms UWP?

1 Ответ

0 голосов
/ 30 апреля 2018

При тестировании на моей стороне, когда вторая страница вызывает PopAsync(), второй экземпляр страницы должен быть удален из стека навигации, при этом новая верхняя страница становится активной страницей, но кажется, что текущая верхняя страница не будет создайте новый экземпляр, но закэшируйте старый экземпляр. Это должно быть так, как ожидалось, но ваш AdControl также не обновляется, и событие Refresh для AdControl не будет вызвано тем, что оно останется пустым.

Чтобы решить эту проблему, вы можете самостоятельно обновить управление. Возможно, вам придется переопределить метод OnAppearing на первой странице, которая содержит AdControl, поскольку на странице, на которую вы возвращаете, вызывается переопределение этого метода. Как только вернется первая страница, будет вызвана OnAppearing, вы можете сделать что-нибудь, чтобы принудительно обновить AdControl, как вы хотите внутри этого метода. Например, здесь я заново инициализирую страницу, которая будет работать:

public MainPage()
{
    InitializeComponent() 
}

async void OnButtonClicked(object sender, EventArgs args)
{
    await Navigation.PushAsync(new Page2());  
}
protected override void OnAppearing()
{
    base.OnAppearing();
    InitializeComponent();
}

Подробнее см. этот документ .

...