首页 > 解决方案 > Xamarin listView 选择了错误的项目

问题描述

我从 xamarin 开始。我展示了一个包含所有可用语言的列表视图。用户单击一个并可以保存它。这是我的代码 XAML :

<ListView x:Name="LanguageList" 
           SelectionMode="Single"
           ItemSelected="OnSelected">
</ListView>

CS :

private async void SetListLanguage(bool init)
    {
        itemList = new ObservableCollection<string>();
        l = await TextToSpeech.GetLocalesAsync();
        foreach (var locale in l)
        {
            if (filter.Length == 0)
                itemList.Add(locale.Name);
            else if (locale.Name.Contains(filter))
                itemList.Add(locale.Name);
            if (init && locale.Name == "English")
            {
                Console.WriteLine("Initiating with English");
                local = locale;
            }
        }
        LanguageList.ItemsSource = itemList;
    }

void OnSelected(object sender, SelectedItemChangedEventArgs e)
    {
        selectedName = e.SelectedItem as string;
        Console.WriteLine("Selected " + selectedName);
        foreach (var locale in l)
        {
            if (selectedName != "" && locale.Name == selectedName)
            {
                Console.WriteLine("Registered locale for  " + selectedName);
                local = locale;
            }
        }
    }

当我点击任何语言时,例如中文,它会给我这个奇怪的输出。

Selected Chinese (Taiwan)
    Registered locale for  Chinese (Taiwan)
    02-25 16:01:09.938 I/mono-stdout(15514): Selected Chinese (Taiwan)
    02-25 16:01:09.938 I/mono-stdout(15514): Registered locale for  Chinese (Taiwan)
    Selected 
    02-25 16:01:09.943 I/mono-stdout(15514): Selected 
    Selected Korean (South Korea)
    Registered locale for  Korean (South Korea)02-25 16:01:09.949 I/mono-stdout(15514): Selected Korean (South Korea)
    02-25 16:01:09.949 I/mono-stdout(15514): Registered locale for  Korean (South Korea)

我尝试删除韩语,它给了我与法语相同的东西。所以这与它是列表中的第一个这一事实有关,但我不明白为什么。

标签: listviewxamarin

解决方案


Console.Writeline造成这种情况。你可以Debug.Writeline改用。

  private void OnSelected(object sender, SelectedItemChangedEventArgs e)
    {
        var selectedName = e.SelectedItem as string;
        //Console.WriteLine("Selected " + selectedName);
        Debug.WriteLine("Selected " + selectedName);
        foreach (var locale in l)
        {
            if (selectedName != "" && locale.Name == selectedName)
            {
                //Console.WriteLine("Registered locale for  " + selectedName);
                Debug.WriteLine("Registered locale for  " + selectedName);
                //local = locale;
            }
        }
    }

在此处输入图像描述

将 Console.WriteLine 留在它所属的控制台应用程序中,并在其他任何地方使用 Debug.WriteLine。引自博客。https://www.kolls.net/blog/?p=120


推荐阅读