Прокрутка в Xamarin Forms SfListView вызывает исключение NullReferenceException в iOS основной функции - PullRequest
0 голосов
/ 12 июля 2020

У меня только что очень странная проблема в моем приложении. Я добавлял Syncfusion SfListView на некоторые страницы в моем приложении, и по какой-то причине, если первое, что я делаю, когда страница, которая использует загрузки SfListView, - это прокручиваю ListView, я получаю исключение NullReferenceException ... в функции UIApplication.Main () который вызывается в классе Main проекта iOS. Однако в этом классе нет ничего особенного. Становится лучше. Если я сначала сделаю что-то еще, например, перетащу элементы в SfListView, чтобы изменить их порядок, и , затем я прокручиваю его, это не вызывает исключения. Что, черт возьми, могло быть причиной этого?

Вот XAML для одной из страниц, использующих SfListView:

<?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:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:syncfusion="clr-namespace:Syncfusion.ListView.XForms;assembly=Syncfusion.SfListView.XForms"
             mc:Ignorable="d"
             x:Class="Partylist.Views.EventsPage"
             Title="Events"
             BackgroundColor="White">
    <ContentPage.ToolbarItems>
        <ToolbarItem IconImageSource="settings_gear.png"
                     Priority="0"/>
    </ContentPage.ToolbarItems>
    
    <ContentPage.Content>
        <!--Main layout of the page-->
        <StackLayout>
            <!--ListView of the events-->
            <syncfusion:SfListView x:Name="EventsListView"
                                   SelectionMode="Single"
                                   SelectionGesture="Tap"
                                   SelectionChanged="OnItemSelected"
                                   DragStartMode="OnHold">
                <syncfusion:SfListView.DragDropController>
                    <syncfusion:DragDropController UpdateSource="True"/>
                </syncfusion:SfListView.DragDropController>
                <syncfusion:SfListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <SwipeView>
                                <!--Swipe from the right to make some options 
                                appear-->
                                <SwipeView.RightItems>
                                    <SwipeItems>
                                        <SwipeItem Invoked="OnDelete"
                                                   CommandParameter="{Binding .}"
                                                   Text="Delete"
                                                   BackgroundColor="#ff418b"
                                                   IsDestructive="true"/>
                                        <SwipeItem Invoked="OnRename"
                                                   CommandParameter="{Binding .}"
                                                   Text="Rename"
                                                   BackgroundColor="#FF7700"/>
                                    </SwipeItems>
                                </SwipeView.RightItems>
                                <!--This is the content that actually appears-->
                                <StackLayout Padding="20,5">
                                    <Label Text="{Binding EventFolder.Name}"
                                           TextColor="#FF7700"
                                           FontSize="Large"/>
                                </StackLayout>
                            </SwipeView>
                        </ViewCell>
                    </DataTemplate>
                </syncfusion:SfListView.ItemTemplate>
            </syncfusion:SfListView>

            <!--"New Event" button-->
            <Button Text="+ Add New Event"
                    TextColor="#ff418b"
                    FontSize="Large"
                    BackgroundColor="#00ffffff"
                    Clicked="OnNewEventClicked"/>
            
            <!--The banner at the bottom of the screen that gives tips-->
            <Frame BorderColor="#ff418b"
                   Padding="0"
                   HeightRequest="75">
                <FlexLayout Direction="Row"
                            AlignItems="Stretch"
                            JustifyContent="SpaceBetween">
                    <!--The "Tip" icon-->
                    <Image Source="tip_icon.png"
                           Margin="10"
                           FlexLayout.Basis="50"/>
                    <!--The short version of the tip-->
                    <Label x:Name="tipLabel"
                           VerticalTextAlignment="Center"
                           TextColor="#bb0099"
                           FontSize="Medium"
                           FontAttributes="Bold"
                           FlexLayout.Basis="240"/>
                    <!--The button that opens up a screen 
                    with the rest of the tip-->
                    <Button Clicked="OnMoreClicked"
                            Text="More"
                            TextColor="White"
                            FontAttributes="Bold"
                            FontSize="Medium"
                            BackgroundColor="#ff418b"
                            FlexLayout.Basis="100"/>
                </FlexLayout>
            </Frame>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

Вот главный класс проекта iOS:

using System;
using System.Collections.Generic;
using System.Linq;

using Foundation;
using UIKit;

namespace Partylist.iOS
{
    public class Application
    {
        // This is the main entry point of the application.
        static void Main(string[] args)
        {
            // if you want to use a different Application Delegate class from "AppDelegate"
            // you can specify it here.
            UIApplication.Main(args, null, "AppDelegate"); // This is the line that throws the exception.
        }
    }
}

ОБНОВЛЕНИЕ: я только что применил SfListView еще к нескольким страницам в моем проекте, и я не мог вводить записи в элементы в списках этих страниц или использовать их SwipeView (экспериментальные в Xamarin, а не те, что из SfListView) без сбоя приложения, как указано выше.

Ответы [ 2 ]

0 голосов
/ 21 июля 2020

Рад сообщить, что сообщенная проблема «NullReferenceException вызывает при прокрутке SfListView с помощью DragDropController» была включена в последнюю версию обновления еженедельного выпуска NuGet от Syncfusion 18.2.0.46 , которая доступна для загрузки (https://www.nuget.org/).

0 голосов
/ 16 июля 2020

Я только что избавился от Synfcusion ListView и вернулся к тому, с которым поставляется Xamarin. @BenReierson сказал, что это проблемы с Xamarin, так что, может быть, я посмотрю, стоит ли переключиться обратно, когда эта ошибка будет исправлена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...