以 xamarin 形式将 child 异步添加到 stacklayout iOS
Asynchronously adding the child to stacklayout in xamarin form iOS
我正在将多视图作为 child 添加到循环中的堆栈布局。只有在添加了所有 children 之后才会呈现页面。我想显示已添加的 children 和正在添加的 children 的加载符号。
我正在做下面的事情,
for(int i= 0; i<30;i++){
myStackLayout.Children.Add(myView);
}
如何使其异步。
最简单的方法是在后台线程上 运行 您的 "content/view creation",然后当您需要将 content/view 添加到 UI 时,将其添加到main/UI 线程 (BeginInvokeOnMainThread)。
运行 在非 main/UI 线程上创建内容:
Task.Run(async () =>
{
var itemsAdded = await AddContentAsync();
});
内容创建示例:
注意:我们 "show" CREATING CONTENT
标签,然后我们创建 20 个按钮并在 main/UI 线程上一次添加一个,同时滚动到新内容它补充说,一旦内容完成,我们滚动回到顶部和 "hide" 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;
}
结果:
我正在将多视图作为 child 添加到循环中的堆栈布局。只有在添加了所有 children 之后才会呈现页面。我想显示已添加的 children 和正在添加的 children 的加载符号。
我正在做下面的事情,
for(int i= 0; i<30;i++){
myStackLayout.Children.Add(myView);
}
如何使其异步。
最简单的方法是在后台线程上 运行 您的 "content/view creation",然后当您需要将 content/view 添加到 UI 时,将其添加到main/UI 线程 (BeginInvokeOnMainThread)。
运行 在非 main/UI 线程上创建内容:
Task.Run(async () =>
{
var itemsAdded = await AddContentAsync();
});
内容创建示例:
注意:我们 "show" CREATING CONTENT
标签,然后我们创建 20 个按钮并在 main/UI 线程上一次添加一个,同时滚动到新内容它补充说,一旦内容完成,我们滚动回到顶部和 "hide" 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;
}