【发布时间】:2021-05-04 21:02:17
【问题描述】:
当我提出WebService 请求时,我一直在尝试实现这个ActivityIndicator。我已经通过了几种不同的解决方案,我正在尝试最简单的一种,如下所示:
https://www.youtube.com/watch?v=FmX4RD2iyWw
嗯,它不适合我。在我看来,它不接受我想给变量的新值。当我通过代码将 IsVisible 变量设置为 true 时,我可以看到那里的旋转圆圈,但是,当我将变量设置为 false 并单击按钮时,没有任何反应。此外,应该有一个“空白”空间对应于不存在的元素。
任何帮助将不胜感激。
非常感谢!
LoginPage.xaml:
<ContentPage.Content>
<StackLayout>
<ActivityIndicator x:Name="activityIndicator" IsVisible="false" IsRunning="True" WidthRequest="30" HeightRequest="30"/>
</StackLayout>
</ContentPage.Content>
<Button Text="Sign In" Clicked="SignIn" />
LoginPage.xaml.cs:
void SignIn(object sender, EventArgs e)
{
activityIndicator.IsVisible = true;
Method();
activityIndicator.IsVisible = false;
}
【问题讨论】:
-
取决于
Method正在做什么,它可能会阻塞 UI 线程,因此 ActivityIndicator 在Method完成之前无法更新 -
您不能按照您尝试的方式执行此操作。在 SignIn 方法完成之前,不会重新布局显示。因此,如果您以“假”开始,您将永远看不到任何东西。并且不会为它保留空白空间 - 了解 IsVisible 的作用。寻找活动指示器的一些不同的工作示例。或者您遗漏了该 youtube 中的一些小细节? (我没看过。)有没有提到使用 async/await?还是Task.Run?抱歉,我没有详细信息,但基本上你需要在“登录”运行时不阻塞 UI 线程。另一种解决方案是控制不透明度。
-
@Rafael 你的按钮在内容页面之外怎么样?你能在 SignIn 方法中达到调试点吗?
-
感谢 cmets!总的来说,我已经能够调试,并且在按下按钮时我可以看到可见性标志从 true 变为 false
-
@ToolmakerSteve 我认为阻塞 UI 线程的方法的想法是一个很好的猜测......我会检查你提到的这些细节。谢谢!
标签: c# xaml xamarin.forms show-hide activity-indicator