gpt4 book ai didi

ios - 以 xamarin 形式 iOS 将 child 异步添加到 stacklayout

转载 作者:行者123 更新时间:2023-11-28 20:59:13 25 4
gpt4 key购买 nike

我将多个 View 作为 subview 添加到循环中的堆栈布局中。只有在添加所有子项后才会呈现页面。我想显示已添加的 child 和正在添加的 child 的加载标志。

我正在做下面的事情,

for(int i= 0; i<30;i++){
myStackLayout.Children.Add(myView);
}

如何使其异步。

最佳答案

最简单的方法是在后台线程上运行“内容/ View 创建”,然后当您需要将该内容/ View 添加到 UI 时,将其添加到主/UI 线程 (BeginInvokeOnMainThread)。

在非主/UI 线程上运行内容创建:

Task.Run(async () =>
{
var itemsAdded = await AddContentAsync();
});

内容创建示例:

注意:我们“显示”CREATING CONTENT 标签,然后我们创建 20 个按钮并在主/UI 线程上一次添加一个,并滚动到添加的新内容,内容完成后,我们滚动回顶部并“隐藏”CREATING CONTENT 标签。

Task<int> AddContentAsync()
{
Device.BeginInvokeOnMainThread(() =>
{
topLayout.RaiseChild(loading);
loading.IsVisible = true;
});

int itemsAdded = 0;
for (itemsAdded = 1; itemsAdded < 21; itemsAdded++)
{
// Create your dynamic content view....
var newContentView = new Button
{
Text = itemsAdded.ToString(),
HorizontalOptions = LayoutOptions.CenterAndExpand
};

Device.BeginInvokeOnMainThread(() =>
{
dynamicStackLayout.Children.Add(newContentView);
(dynamicStackLayout.Parent as ScrollView)?.ScrollToAsync(newContentView, ScrollToPosition.End, true);
});
}

Device.BeginInvokeOnMainThread(() =>
{
(dynamicStackLayout.Parent as ScrollView)?.ScrollToAsync(0, 0, true);
loading.IsVisible = false;
topLayout.RaiseChild(scrollView);
});
return itemsAdded;
}

结果:

enter image description here

关于ios - 以 xamarin 形式 iOS 将 child 异步添加到 stacklayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50521810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com