【问题标题】:how to use pagination in group listview如何在组列表视图中使用分页
【发布时间】:2020-06-03 09:56:00
【问题描述】:

我在普通列表视图中使用 ItemAppearing 方法分页。但我在组列表视图中开发了相同的代码。但这是一个崩溃。如何在分组列表视图中使用 ItemAppearing 方法。任何人都可以指导我解决这种情况。我粘贴我的代码供您参考。

     <ListView x:Name="CustomerListview" ItemAppearing="Handle_ItemAppearing"
 IsVisible="true" Footer=""   IsGroupingEnabled="true" BackgroundColor="Transparent" Margin="0,10,0,10" SeparatorVisibility="None"   HasUnevenRows="True" VerticalOptions="FillAndExpand"  HorizontalOptions="CenterAndExpand" >
             <ListView.ItemTemplate>
            <DataTemplate>
           <ViewCell Height="80"> 
           <StackLayout
        Margin="20,0,0,0" Spacing="0" Padding="0"
        Orientation="Horizontal"
        VerticalOptions="FillAndExpand">

        <StackLayout 
            x:Name="firstStackLayout"
            Margin="0,0,0,-6"
            HorizontalOptions="Center"
            Orientation="Vertical"
            VerticalOptions="FillAndExpand">
            <BoxView
                Grid.Row="0"
                 Grid.Column="0"
                 Margin="0,0,0,-6"
                HeightRequest="30"
                HorizontalOptions="Center"
                WidthRequest="2"
                VerticalOptions="FillAndExpand"
                Color="#b11541" />
            <BoxView
                Grid.Row="1"
                Grid.Column="0"
                Margin="0,0,0,0"
                HeightRequest="20"
                CornerRadius="10"
                BackgroundColor="Gray"
                WidthRequest="20">
                <!--<ff:CachedImage.Transformations>
                    <ffTransformations:RoundedTransformation
                        BorderHexColor=""
                        BorderSize="20"
                        Radius="240" />
                </ff:CachedImage.Transformations>-->
            </BoxView>
            <BoxView 
                Grid.Row="2"
                Grid.Column="0"
                Margin="0,-6,0,0"
                HeightRequest="30"
                HorizontalOptions="Center"
                IsVisible="true"
                WidthRequest="2"
                 VerticalOptions="FillAndExpand"
                Color="#b11541" />
        </StackLayout>

                    <StackLayout
                Margin="10,15,5,0"
                HorizontalOptions="Start"
                Orientation="Vertical"
                VerticalOptions="Center">
                <Label
                    FontAttributes="Bold"
                    FontSize="15"
                    HorizontalOptions="Start"
                    Text="{Binding Lease_refno}"
                    TextColor="#b11541"
                    XAlign="Start" />
                <StackLayout
                    Margin="0,0,5,0"
                    Orientation="Horizontal"
                    VerticalOptions="EndAndExpand">
                    <Label
                        FontSize="14"
                        Text="{Binding Billing_start_date}"
                        TextColor="#4e5156" />
                </StackLayout>

            </StackLayout>
                 <StackLayout.GestureRecognizers>
                                                    <TapGestureRecognizer Tapped="leaseClicked"/>
                                               </StackLayout.GestureRecognizers>
    </StackLayout>
                    </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
            <ListView.GroupHeaderTemplate>
                <DataTemplate>
                               <ViewCell Height="55">
                                 <StackLayout BackgroundColor="Transparent" Padding="5, 5, 5, 0">

                            <Frame Margin="5,0,5,5" HasShadow="False" IsClippedToBounds="true" BorderColor="Transparent" BackgroundColor="Transparent" CornerRadius="5" Padding="0">
                                <Grid RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width, Factor=0.25}"
                                      RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width, Factor=0.75}"
                                      BackgroundColor="White" ColumnSpacing="0" RowSpacing="0">

                                <Grid.RowDefinitions>
                                    <RowDefinition Height="5"/>
                                    <RowDefinition Height="Auto"/>
                                     <RowDefinition Height="30"/>
                                </Grid.RowDefinitions>
                                 <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto" />
                                        <ColumnDefinition Width="*" />
                                        <ColumnDefinition Width="*" />
                                        <ColumnDefinition Width="*" />
                                        <ColumnDefinition Width="*" />
                                    </Grid.ColumnDefinitions>


        <StackLayout BackgroundColor="White" VerticalOptions="FillAndExpand" Grid.Row="0" Grid.RowSpan="8">
                                    <BoxView HorizontalOptions="Start"  WidthRequest="5"   BackgroundColor="#b11541" VerticalOptions="FillAndExpand"/>
                </StackLayout>

    <Label Text="{Binding Customer_company}" TextColor="Black"
               FontSize="14" Grid.Row="1"  Grid.Column="0" Grid.ColumnSpan="7"
               x:Name="originEntry" Margin="20,5,0,5" 
               VerticalOptions="Start" FontFamily="{StaticResource OpenSansBold}"
               HorizontalOptions="FillAndExpand" />

 <!--<StackLayout Spacing="0"  Grid.Column="0" Padding="0" Margin="0,0,0,10" Grid.Row="2" Orientation="Horizontal">
         <Label Text="View Lease" Padding="5,0,5,0" TextColor="White" BackgroundColor="#97304d"

               Grid.ColumnSpan="4" FontFamily="{StaticResource OpenSansSemiBold}"  Margin="20,0,0,0"  FontSize="12"
               x:Name="destinationEntry"   VerticalOptions="Start"
               HorizontalOptions="Start" >
       <Label.GestureRecognizers>
                                                    <TapGestureRecognizer Tapped="leaseClicked"/>
                                               </Label.GestureRecognizers>
             </Label>

        </StackLayout>-->

                                       <Grid.GestureRecognizers>
                        <TapGestureRecognizer NumberOfTapsRequired="1" CommandParameter="{Binding .}" Tapped="HeaderTapped"/>
                   </Grid.GestureRecognizers>
                                </Grid>
                                </Frame>
                                     </StackLayout>
                        </ViewCell>
                     </DataTemplate>
        </ListView.GroupHeaderTemplate>
        </ListView>

私有异步 void Handle_ItemAppearing(对象发送者,Xamarin.Forms.ItemVisibilityEventArgs e) { var currentIdx = Items.IndexOf((ProductColor)e.Item);

            if (currentIdx > _lastItemAppearedIdx)
            {
                if (Items.Count == 0)
                    return;
                var selectedItem = e.Item as ProductColor;

                //hit bottom!
                if (isLoading == false && selectedItem == ResultList[ResultList.Count - 1])
                {

                    i++;
                    await UserTweetsList("lease", "");


                }
            }
            _lastItemAppearedIdx = Items.IndexOf((ProductColor)e.Item);


    }

【问题讨论】:

  • 任何人都可以解释如何在 xamarin 表单中使用分页组列表视图

标签: xamarin.forms xamarin.android xamarin.ios


【解决方案1】:

var currentIdx = Items.IndexOf((ProductColor)e.Item

其实如果ItemAppearing你可以直接得到当前出现的item的索引

int currentIdx = e.ItemIndex ;

并像这样改进代码:

在 ListView 组中,当第一个项目出现时,索引等于 -1。

if(currentIdx !=-1)
{
  // if...
}

另外,从你的代码中我看不到 group 的一部分。因此,最好分享包含问题的样本,以便我可以测试它。

更新

private  void CusHandle_ItemAppearing(object sender, Xamarin.Forms.ItemVisibilityEventArgs e)
        {
            // var currentIdx = customerList.IndexOf((ProductCustomer)e.Item);
            int currentIdx = e.ItemIndex;

            if (currentIdx != -1)
            {
                if (currentIdx > _lastItemAppearedIdx)
                {
                    if (_allGroups.Count == 0)
                        return;
                   
                    if (currentIdx== _expandedGroups.Count-2)
                    {

                       //...


                    }
                    _lastItemAppearedIdx = currentIdx;
                }
            }
    
        }

【讨论】:

  • 评论不用于扩展讨论;这个对话是moved to chat
  • 你能把样品寄给我吗?
猜你喜欢
  • 2016-06-03
  • 2020-05-25
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
  • 2011-08-19
  • 2013-02-06
相关资源
最近更新 更多