ListView项不存在';t扩展Xamarin形式中的折叠高度
我有一个列表视图。在ListView中,我有ListViewCell。ListViewCell具有展开和折叠功能。膨胀-坍塌行为中几乎没有问题 1-如果我展开第一项,它工作正常。但若我先展开第二项,再展开第一项,第一项就落后了。请参见屏幕截图中的案例1 2-如果我点击列表视图项,它会以灰色显示一秒钟。我想阻止这一切。当用户点击任何单元格时,它不应该改变颜色。案例2 3-如果我展开第一项并再次折叠它。它会折叠,但会在第二项和第一项之间保留空白 我注意到了这种行为。如果我向下和向上滚动,上述问题将得到解决。在理想情况下,用户不会在每次操作后上下滚动:D 注意:我在ListViewCell中有条目、日期选择器和按钮。用户必须能够在其中输入 这是我的密码。我还附上了屏幕截图。请建议 主页列表视图 截图ListView项不存在';t扩展Xamarin形式中的折叠高度,xamarin,xamarin.forms,Xamarin,Xamarin.forms,我有一个列表视图。在ListView中,我有ListViewCell。ListViewCell具有展开和折叠功能。膨胀-坍塌行为中几乎没有问题 1-如果我展开第一项,它工作正常。但若我先展开第二项,再展开第一项,第一项就落后了。请参见屏幕截图中的案例1 2-如果我点击列表视图项,它会以灰色显示一秒钟。我想阻止这一切。当用户点击任何单元格时,它不应该改变颜色。案例2 3-如果我展开第一项并再次折叠它。它会折叠,但会在第二项和第一项之间保留空白 我注意到了这种行为。如果我向下和向上滚动,上述问题将得
之所以发生这种情况,是因为只有在第一次渲染时才计算单元格的高度。之后,更改仅影响内部布局视图 尝试调用
ForceUpdateSize()代码>在当前tapped命令的逻辑末尾。它将强制整个单元格重新计算其边界
代码应该如下所示:
private void LabelOpenCommand(object sender,TappedEventArgs e)
{
if (LabelCollapse.Text == "+")
{
FrameVisible.IsVisible = false;
LabelCollapse.Text = "-";
FrameVisible.IsVisible = true;
}
else
{
FrameVisible.IsVisible = true;
LabelCollapse.Text = "+";
FrameVisible.IsVisible = false;
}
ForceUpdateSize
}
希望有帮助。谢谢ForceUpdateSize
需要2-3秒才能获得更新的大小。通常情况下,手风琴手不应该花时间,因为有操作存在,而应该隐藏表演。所以,如果有人问我为什么要花时间,我很难解释。请提出你的想法!事实上,这不需要太多时间。整个ViewCell
看起来很重,但即使这样2-3秒也是不可接受的。您是否尝试过异步执行此操作?“你是在为谁说话吗?”迪戈拉法尔苏扎我也看过了。这是第一次,需要1-2秒,我想这很好。如果用户尝试展开折叠2-3次,则会变得非常缓慢,需要3-4秒才能展开折叠。此延迟问题仅适用于iOS。它在UWP和Android中运行良好。我认为它应该在iOS中运行良好,因为它是我们的主要目标。您提到了异步。我该怎么做?我已经把你们在回答中给出的确切代码写下来了。你能用异步代码更新你的答案吗?谢谢。对不起,我迟到了。只需将该方法的签名更改为private async void labelopecommand(…){…}
。我没有在iOS上尝试过,只是在android上,而且它的响应速度足够快。@Diegrafaelsouza,这没有任何改变。是的,你是对的,它在Android中运行得非常快。在iOS中仍然需要时间。我尝试将此行CachingStrategy=“RecycleElement
放在我的Listview中,它开始工作正常。但是它引发了另一个问题:当我展开第一个项目(viewcell)时,它也会展开下一个屏幕上的其他单元格。有什么建议吗?
<StackLayout Margin="0" Padding="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<!-- Blue heading-->
<StackLayout Margin="0" Padding="0" Grid.Row="0" BackgroundColor="#367fa9">
<Grid HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"
Padding="15" RowSpacing="10" Margin="0" BackgroundColor="Transparent">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Label Text="{Binding Name}" HorizontalOptions="Center" Grid.Column="0" Grid.Row="0"/>
<Label Text="{Binding Date}" HorizontalOptions="Center" Grid.Column="1" Grid.Row="1"/>
<Label Text="+" HorizontalOptions="End" VerticalOptions="Center" Grid.Column="2" x:Name="LabelCollapse" Grid.Row="0" Grid.RowSpan="2" FontFamily="Roboto">
<Label.GestureRecognizers>
<TapGestureRecognizer Tapped="LabelOpenCommand"/>
</Label.GestureRecognizers>
</Label>
</Grid>
</StackLayout>
<StackLayout Margin="0" Padding="0" Grid.Row="1" x:Name="FrameVisible">
<Frame Margin="0" Padding="0" HorizontalOptions="FillAndExpand" BackgroundColor="White" OutlineColor="Gray">
<StackLayout Margin="0" VerticalOptions="Fill" Padding="20" IsVisible="{Binding IsWeekly}">
<Grid>
<Grid.Resources>
<ResourceDictionary>
<local:InvertBooleanConverter x:Key="invertBooleanConverter" />
<Style x:Key="LabelStyle" TargetType="Label">
<Setter Property="FontSize" Value="15"/>
<Setter Property="FontFamily" Value="Roboto"/>
<Setter Property="TextColor" Value="White"/>
</Style>
</ResourceDictionary>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="125"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
</Grid.RowDefinitions>
<Image Source="EditLog.png" Grid.Column="1" Grid.Row="0" HorizontalOptions="End" VerticalOptions="Center"
HeightRequest="24">
<Image.GestureRecognizers>
<TapGestureRecognizer Tapped="OnImageViewItemTapped"/>
</Image.GestureRecognizers>
</Image>
<Label Text="Date" Grid.Column="0" Grid.Row="0" Style="{StaticResource LabelStyle}"
TextColor="Black" FontFamily="Roboto" Margin="0" />
<local:ExtendedDatePicker TextColor="LightGray" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1"
IsEnabled="False" Date="{Binding Date}" BackgroundColor="White">
<DatePicker.Format>dd/MM/yyyy</DatePicker.Format>
</local:ExtendedDatePicker>
<Label Text="Pay" Grid.Column="0" Grid.Row="2" Style="{StaticResource LabelStyle}"
TextColor="Black" FontFamily="Roboto" Margin="0,10,0,0" />
<local:CustomEntry Grid.Column="0" Grid.Row="3" Margin="0,10,0,0" WidthRequest="150" Text="{Binding Pay}"
Style="{StaticResource LabelStyle}" TextColor="Black" HorizontalOptions="EndAndExpand" VerticalOptions="FillAndExpand"/>
<Button Text="Submit" BorderRadius="18" TextColor="White" Command="{Binding SubmitWeeklyCommand}" Grid.Column="0" Grid.Row="4" FontFamily="Roboto"/>
</Grid>
</StackLayout>
</Frame>
</StackLayout>
</Grid>
</StackLayout>
private void LabelOpenCommand(object sender,TappedEventArgs e)
{
if (LabelCollapse.Text == "+")
{
FrameVisible.IsVisible = false;
LabelCollapse.Text = "-";
FrameVisible.IsVisible = true;
}
else
{
FrameVisible.IsVisible = true;
LabelCollapse.Text = "+";
FrameVisible.IsVisible = false;
}
}
private void LabelOpenCommand(object sender,TappedEventArgs e)
{
if (LabelCollapse.Text == "+")
{
FrameVisible.IsVisible = false;
LabelCollapse.Text = "-";
FrameVisible.IsVisible = true;
}
else
{
FrameVisible.IsVisible = true;
LabelCollapse.Text = "+";
FrameVisible.IsVisible = false;
}
ForceUpdateSize
}