【发布时间】:2016-07-25 13:10:14
【问题描述】:
我在实现一个在页面加载时显示 ActivityIndicator 这样简单的功能时遇到了一些麻烦,事实证明这非常困难。
这是我在 App.xaml.cs 上使用的代码:
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new NavigationPage(new LoginPage());
}
}
这是我的登录页面
public partial class LoginPage : ContentPage
{
public LoginPage()
{
InitializeComponent();
btnLogin.Clicked += BtnLogin_Clicked;
}
protected async void BtnLogin_Clicked(object sender, EventArgs e)
{
loadingView.IsVisible = true;
activityIndicator.IsRunning = true;
await Navigation.PushAsync(new SchedulePage());
loadingView.IsVisible = false;
activityIndicator.IsRunning = false;
}
}
没有详细说明,loadingView 是我在 xaml 文件中的一个视图,其中包含我的 ActivityIndicator。我的主要问题是,当我调用 Navigation.PushAsync() 时,ActivityIndicator 的动画会停止。根据我读到的内容,这是因为这两个操作都发生在主线程上,所以一个会中断另一个。
我需要显示指示器的原因是因为我的 SchedulePage 需要大量时间来呈现,因为它有一个 XLabs 日历控件。
您将如何实施这样的事情?
【问题讨论】:
-
UI 必须在主线程上初始化,所以你不能把它排除在外。您可以做的是确保数据加载和填充日历控件以异步方式发生。
-
这将涉及浏览 CalendarView 源代码中的所有复杂类,并弄清楚它们是如何组合在一起的,而我并不精通 C#。我正在寻找一种更简单的方法来避免任何可能的头痛,我在这里的日程安排很紧:S 现在,我将保持原样,活动指示器的简单存在,即使不是旋转,应该足以让用户知道正在发生的事情,我希望......
-
也许确保数据加载异步发生(也就是不要在构造函数或导航到)就足够了,但基本上,是的,这就是它的意思。复杂数据的性能对于紧凑的时间表来说不是一件容易的事。 :P
-
这可能对你有帮助,这解决了我的问题。 'forums.xamarin.com/discussion/50338/…'
标签: c# xamarin xamarin.android xamarin.forms xlabs