C# Xamarin、Android、RecyclerView:平滑背景下载对象,然后设置它们
在我们的应用程序中,我们不断地从服务器重新加载对象,然后将它们放在RecycleView滚动视图中。现在,它确实工作得很好,但它是一个很大的滞后。喜欢-它滚动,然后停止并重新加载一秒钟,然后滚动,然后重新加载等等。我注意到其他应用程序的做法有所不同。例如,当一个人滚动浏览facebook时。你可以一直向下滚动,然后,当图像完成加载后,它们被放置在空的布局容器中。所以我认为这只能通过背景线程来实现——所以我已经这样做了,但结果就是上面提到的。它远没有facebook或任何其他可以滚动图片的应用程序那么流畅。这里可能有什么问题:C# Xamarin、Android、RecyclerView:平滑背景下载对象,然后设置它们,c#,android,C#,Android,在我们的应用程序中,我们不断地从服务器重新加载对象,然后将它们放在RecycleView滚动视图中。现在,它确实工作得很好,但它是一个很大的滞后。喜欢-它滚动,然后停止并重新加载一秒钟,然后滚动,然后重新加载等等。我注意到其他应用程序的做法有所不同。例如,当一个人滚动浏览facebook时。你可以一直向下滚动,然后,当图像完成加载后,它们被放置在空的布局容器中。所以我认为这只能通过背景线程来实现——所以我已经这样做了,但结果就是上面提到的。它远没有facebook或任何其他可以滚动图片的应用程序
private async Task LoadTHEBOOKAsync(PVH_TheBook_Singles vh, int position, int fkTaskId)
{
await Task.Run(() =>
{
//Loading on another Thread
int taskID = loadPhotos.pictures[position - (this.hasHeader ? 1 : 0)].taskID;
int taskIDWHenTheBook = loadPhotos.pictures[position - (this.hasHeader ? 1 : 0)].fullscreenID;
Bitmap bmp = loadImage(position);
String commentCount = KumulosHelper.Functions.Pictures.GetCountOfComments
(fkTaskId.ToString()).ToString();
String LikeCount = loadPhotos.pictures[position - (this.hasHeader ? 1 : 0)].likes.ToString();
int taskDoneId = loadPhotos.pictures[position - (this.hasHeader ? 1 : 0)].taskdoneid;
String exp = null;
if (taskID != 0)
{
exp = BookOfLife.Challenges.Libary.Instance.getTask(taskID).Experience.ToString() + "ap";
}
else
{
exp = BookOfLife.Challenges.Libary.Instance.getTask(taskIDWHenTheBook).Experience.ToString() + "ap";
}
// Setting on UI Thread
((Activity)ctx).RunOnUiThread(() =>
{
vh.Image.SetImageBitmap(bmp);
vh.txtComments.Text = commentCount;
vh.txtLikeCountBlue.Text = LikeCount;
vh.taskdoneid = taskDoneId;
vh.txtap.Text = exp;
});
});
}
如您所见,所有donwloading都是在异步任务中完成的,只有放置在ui线程上完成。这是错的吗?因为我似乎找不到其他解决办法?我的意思是,我必须在UI线程上设置我的图像,对吗?所以我必须阻止它一秒钟,直到一切正常,不是吗
任何帮助都会很棒。
谢谢!:) 您可以查看xamarin内置的,您可以在那里获得更多关于新闻提要系统的信息
使用谷歌的支持库xamarin中是否存在类似的功能?