Я создал приложение, которое запрашивает имя пользователя и возвращает статистику для этого пользователя.Когда счетчик больше 1, он фокусируется на сборщике и просит выбрать один из вариантов.После этого вызывается метод SelectedIndexChanged (Platformselect_SelectedIndexChanged), который получает статистику.Проблема в том, что если пользователь вводит имя пользователя, то в первый раз оно работает.Когда пользователь возвращается и повторно вводит имя пользователя, он не фокусируется (он не показывает средство выбора) и автоматически вызывает метод SelectedIndexChanged с platformselect.SelectedIndex, равным -1, что приводит к сбою моей программы.Не могли бы вы мне помочь?
Я попытался установить фокус на главном потоке, я протестировал его на iOS и Android, и возникает та же проблема.
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
platformselect.HeightRequest = 0;
this.search.Clicked += Button_Clicked;
}
public async void searchStats(string usernameText)
{
search.IsEnabled = false;
activityIndicator.IsRunning = true;
var id = await GetDataLogic.GetID(usernameText);
publicid = id;
activityIndicator.IsRunning = false;
if (id.uid == "error")
{
await DisplayAlert("Error", "Could not find username: " + usernameText, "OK");
search.IsEnabled = true;
return;
}
else if (id.uid == "errornointernet")
{
await DisplayAlert("Error", "Could not connect to the Internet. Please check your connection and try again.", "OK");
search.IsEnabled = true;
return;
}
else
{
if(id.platforms.Count > 1)
{
platformselect.ItemsSource = publicid.platforms.ToList();
//we have to show alert to choose platform and then call get user stats.
**Device.BeginInvokeOnMainThread(() =>
{
if (platformselect.IsFocused)
platformselect.Unfocus();
platformselect.Focus();
});**
}
else
{
//we call it without asking because there is only one platform.
var userstats = await GetDataLogic.GetStats(id, 0);
await Navigation.PushAsync(new Stats(userstats, favorites));
}
}
}
private async void Platformselect_SelectedIndexChanged(object sender, EventArgs e)
{
//the second time it doesnt show the picker and it automatically enters -1... it returns null exception. Has to be investigated.
var userstats = await GetDataLogic.GetStats(publicid, platformselect.SelectedIndex);
await Navigation.PushAsync(new Stats(userstats, favorites));
}
}
Я хотел быон всегда должен фокусироваться на средстве выбора и ждать ответа пользователя, а не автоматически вызывать SelectedIndexChanged с -1 как selectedindex