Почему мое приложение вылетает при вызове onbackpressed?

Я пытаюсь выполнить некоторый javascript (webview Eval), когда нажата кнопка возврата (OnBackPressed), но приложение вылетает. Может кто-нибудь разобраться в происходящем?

MainActivity.cs

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        /*
     some code
    */
        base.OnCreate(savedInstanceState);
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
        LoadApplication(new App());
    }

    public override void OnBackPressed()
    {
        MainPage.ExecJS();
}
}

MainPage.xaml.cs

 public partial class MainPage : ContentPage
 {
    public static double ScreenWidth { get; set; }
    public static double ScreenHeight { get; set; }
    public static WebView webnav;
    StackLayout parent = null;
    public MainPage()
    {
        InitializeComponent();
        WebView webnav = new WebView
        {
            HeightRequest = 1000,
            WidthRequest = 1000,
            Source = "https://www.comprarmusicas.com.br/mobile/index.php"
        };
        parent = new StackLayout();
        parent.Children.Add(webnav);
        Content = parent;
    }

     public static void ExecJS()
    {
        string jsCode = "alert('ok');";
        webnav.Eval(jsCode);
    }
 }
2
0
340
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не назначаете статическую переменную WebView в своем .ctor, а создаете новую локальную переменную экземпляра.

Удалите тип WebView из того места, где вы создаете / назначаете WebView, т.е.

public MainPage()
{
    InitializeComponent();
    webnav = new WebView // this assigns to the "public static WebView webnav;"
    {
        HeightRequest = 1000,
    ~~~

Как я могу реализовать веб-просмотр в MainPage.xaml и объявить его статическим? Я имею в виду, что-то вроде: <Webview x: Name = "webnav" (static) Navigated = "webnav_Navigated" /> и метод навигации доступен на MainPage.cs. Я пробовал и не смог получить доступ, думаю, это решит все мои проблемы.

Éder Rocha 13.09.2018 20:28

@ ÉderRochaBezerra Назначьте переменную экземпляра Webview из вашего "XAML" (который является просто переменной экземпляра) статической (просто используйте другое имя переменной) ... но помните, что это приведет к тому, что WebView (из XAML) будет содержат статическую ссылку в вашем классе MainPage и, таким образом, он никогда не получит GC'd, поэтому не забудьте вывести null из этой ссылки, когда вы уходите от MainPage (например, в обработчике OnDisappearing), это обычная проблема использования статических переменных и утечки памяти, которые могут произойти, если вы не удалите эти ссылки.

SushiHangover 13.09.2018 20:37

@ ÉderRochaBezerra Рада, что это помогло. Удачного кодирования 🍣

SushiHangover 13.09.2018 22:40

Другие вопросы по теме