【发布时间】:2019-06-05 23:42:30
【问题描述】:
我有一个由新闻对象列表填充的 ListView,这些对象是从从网站下载 rss 提要并将数据转换为新闻对象的服务中检索的。每个新闻对象都包含一个发布日期、标题、链接和描述。我的自定义视图单元只是在左侧的框中显示日期,然后在右侧剩余空间中显示标题,每个项目之间有空格。问题是列表视图仅显示 70 多个项目中的前 17 个,在第 17 号之后,其余的视图单元都在那里,但它们是空的,没有文本或日期框。我还启用了拉动刷新,它只是再次调用服务来重新填充列表(我知道效率低下,但也在努力只用新添加的新闻项更新列表),当我拉动刷新时,整个列表视图变成空白视单元。
到目前为止,我已经尝试了一些没有找到解决方案的方法,它们只会让我更加困惑。我试图通过在列表上执行 Take(20) 来限制添加的项目数量,该列表显示前 16 个项目,然后是 2 个空白项目,然后是 1 个正确显示的项目,然后是更多空白。当这个较短的列表被刷新并再次调用时,除了第 14 个单元格之外的所有单元格都是空白的。如果有的话,刷新后会留在那里,看起来是随机的。
不过,为了确认某些内容,这些项目仍然是可点击的。我仍然可以点击任何项目,即使是空白的,它也会将浏览器打开到正确的文章。
<ListView
x:Name="newsList"
Margin="0"
BackgroundColor="Transparent"
HasUnevenRows="True"
HorizontalOptions="CenterAndExpand"
IsPullToRefreshEnabled="True"
ItemSelected="NewsList_ItemSelected"
Refreshing="NewsList_Refreshing"
SeparatorVisibility="None"
VerticalOptions="CenterAndExpand">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Frame
Margin="0,5,0,5"
Padding="2"
BorderColor="Gray"
HeightRequest="60">
<AbsoluteLayout Padding="0">
<StackLayout
AbsoluteLayout.LayoutBounds="0, 0, 60, 60"
AbsoluteLayout.LayoutFlags="None"
BackgroundColor="Gray">
<Label
HorizontalOptions="CenterAndExpand"
HorizontalTextAlignment="Center"
Text="{Binding Date, StringFormat='{0:MMM d}'}"
TextColor="White"
VerticalOptions="CenterAndExpand" />
<Label
HorizontalOptions="CenterAndExpand"
HorizontalTextAlignment="Center"
Text="{Binding Date, StringFormat='{0:yyyy}'}"
TextColor="White"
VerticalOptions="CenterAndExpand" />
</StackLayout>
<Label
Margin="5"
AbsoluteLayout.LayoutBounds="60, 0, .85, 1"
AbsoluteLayout.LayoutFlags="SizeProportional"
BackgroundColor="White"
FontSize="16"
Label.MaxLines="2"
LineBreakMode="WordWrap"
Text="{Binding Title}" />
</AbsoluteLayout>
</Frame>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
以及背后的代码
private NewsService newsService = new NewsService();
public NewsPage()
{
InitializeComponent();
newsList.ItemsSource = newsService.ParseRssFile().Take(20);
Application.Current.Properties["newsUpdated"] = DateTime.Today;
}
private void NewsList_Refreshing(object sender, System.EventArgs e)
{
newsList.ItemsSource = newsService.ParseRssFile();
newsList.EndRefresh();
}
private void NewsList_ItemSelected(object sender, SelectedItemChangedEventArgs e)
{
var News = e.SelectedItem as News;
//do something...
var uri = new Uri(News.Link);
Device.OpenUri(uri);
}
新闻服务只返回一个新闻对象列表,每个对象都包含一个标题、链接、描述字符串和一个日期时间。
预期结果是正确显示新闻日期+标题,我假设大约 70 个项目应该不难显示。
编辑:尝试在调试中打印每个新闻项目的标题和发布日期,以确认它们实际上并非都是空白的,它们不是空白的。
【问题讨论】:
标签: c# xamarin.forms