Навигация по собственным формам в Xamarin дает исключение нулевой ссылки - PullRequest
5 голосов
/ 10 января 2020

У меня есть 4 вкладки в проекте Xamarin. Android (изначально). 3 вкладки загружаются изначально, но одна вкладка, которую я загружаю, является страницей форм (страница содержимого). Вот коды для вкладок -

    public override Android.Support.V4.App.Fragment GetItem(int position)
        {

            switch (position)
            {
                case 0:
                    return new tab1Fragment();

                case 1:
                    return new tab2Fragment();

                case 2:
                    return new tab3Fragment();                   

                case 3:
                   var fragment = new FormsPage1().CreateSupportFragment(Android.App.Application.Context);
                    return fragment;

                default:
                    return null;
            }
        }

Страница форм загружается успешно, но когда я касаюсь где-нибудь на этой странице, она вылетает. Вот исключение -

System.NullReferenceException: Object reference not set to an instance of an object.
at Android.Views.View.n_DispatchTouchEvent_Landroid_view_MotionEvent_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_e)
  at (wrapper dynamic-method) System.Object.55(intptr,intptr,intptr)
 Unhandled Exception from source=AndroidEnvironment
 System.NullReferenceException: Object reference not set to an instance of an object.
  at Xamarin.Forms.Platform.Android.PlatformRenderer.DispatchTouchEvent (Android.Views.MotionEvent e) 
at Android.Views.View.n_DispatchTouchEvent_Landroid_view_MotionEvent_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_e)

Обновление Xaml-

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:local="clr-namespace:ClientApp"
         x:Class="ClientApp.FormsPage1">

<StackLayout>
    <!-- Place new controls here -->
    <Label Text="Welcome to Xamarin.Forms!" 
       HorizontalOptions="Center"
       VerticalOptions="CenterAndExpand" />
</StackLayout>

Когда я отлаживаю больше, представление фрагмента всегда пустое, я подозреваю, что это вызывает проблему, но не уверен .. Пожалуйста, помогите ..

Ответы [ 2 ]

5 голосов
/ 12 января 2020

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

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

2 голосов
/ 12 января 2020

пользователь Xamarin.Forms.Forms.Init (this, null); в вашем коде, прежде чем создавать фрагмент

   if (__fragment1  == null)  
    {  

        // iOS  
        //Forms.Init()  
        //var iosViewController = new MyFormsPage().CreateViewController();  



        Xamarin.Forms.Forms.Init(this, null);  
        // #2 Use it  
        _fragment1 = new MainPage().CreateFragment(this);  
    }  
...