异步将子项添加到xamarin表单iOS中的stacklayout

时间:2018-05-25 04:59:41

标签: ios xamarin stacklayout

我将多视图作为子项添加到循环中的stacklayout。页面仅在添加所有子项后呈现。我想展示添加的孩子和正在添加的孩子的装载标志。

我在做,如下所示,

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

如何使其异步。

1 个答案:

答案 0 :(得分:1)

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

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

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

内容创建示例:

注意:我们&#34;显示&#34; CREATING CONTENT标签,然后我们创建20个按钮并在主/ UI线程上一次添加一个按钮,并在添加内容时滚动到新内容,一旦内容完成,我们滚动回到顶部并且&#34;隐藏&#34; 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