在我的Xamarin.Forms项目中,我有一个登录表单,用于登录用户,然后将其重定向到另一个页面。我想在尝试登录时显示ActivityIndicator,但将IsVisible设置为true在登录功能完成之前实际上并不生效。我的代码如下所示:
void OnLoginButtonClicked(object sender, EventArgs e)
{
LoadingIndicator.IsVisible = true;
Login();
}
public void Login()
{
var user = new User
{
Email = usernameEntry.Text,
Password = passwordEntry.Text
};
User validUser = AreCredentialsCorrect(user);
if (validUser != null)
{
Navigation.PushAsync(new ProfilePage());
}
else
{
messageLabel.Text = "Login failed";
passwordEntry.Text = string.Empty;
//It will only show the LoadingIndicator at this point.
}
}
如果用户是正确的,它永远不会显示LoadingIndicator,因为它在显示之前导航到另一个页面。 如果用户无效,则只有在遇到else子句并显示“登录失败”后才会显示LoadingIndicator。任何人都可以解释为什么会这样,以及我可以做些什么来解决它?
答案 0 :(得分:1)
尝试使用async / await。在导航时允许UI更新。
async void OnLoginButtonClicked(object sender, EventArgs e)
{
LoadingIndicator.IsVisible = true;
await Login();
}
public async Task Login()
{
var user = new User
{
Email = usernameEntry.Text,
Password = passwordEntry.Text
};
User validUser = AreCredentialsCorrect(user);
if (validUser != null)
{
await Navigation.PushAsync(new ProfilePage());
}
else
{
messageLabel.Text = "Login failed";
passwordEntry.Text = string.Empty;
//It will only show the LoadingIndicator at this point.
}
}
答案 1 :(得分:0)
这里有两种可能的解释,一种是它可以重定向得太快以至于没有时间显示加载指示器,我之前遇到过这个问题。我们有一个非常好的加载符号和动画,但后来我们切换到Aurelia框架,它登录如此之快,它只是没有时间显示它,即使它实际工作。至于代码更改,我会尝试将其添加到登录功能中,至少目前是为了给它一些清晰度,如果它实际上只是快速登录它没有显示或它根本就不显示。她是我的建议。
void OnLoginButtonClicked(object sender, EventArgs e)
{
LoadingIndicator.IsVisible = true;
Login(LoadingIndicator.IsVisible);
}
public void Login(Bool IsVisible)<--- might have type wrong not familiar with you custom defines types I would expect it to be a bool though.
IsVisible = true;
{
var user = new User
{
IsVisible = true;
Email = usernameEntry.Text,
Password = passwordEntry.Text
};
User validUser = AreCredentialsCorrect(user);
if (validUser != null)
{
IsVisible = true;
Navigation.PushAsync(new ProfilePage());
}
else
{
IsVisible = true;
messageLabel.Text = "Login failed";
passwordEntry.Text = string.Empty;
//It will only show the LoadingIndicator at this point.
}
}
如果没有别的,这可能有助于澄清为什么它没有被显示。另外,在大多数浏览器上,请不要忘记使用Web调试器f12,并查找包含指示符的元素。
希望这有帮助!如果不让我知道,我将删除答案(我必须使用答案,因为我不能在50代以下发表评论)干杯!