×Закрыть

Не работает фильтр коллекции в Spinner. C# xamarin

Суть данной части приложения: Есть два спиннера. Первый спиннер показывает тип продукта (например овощи, фрукты) и при его выборе другой список сужается до тех вариантов, которые выбраны в первом спиннере. Проект в Visual Studio на шарпе в Xamarin.

        class ProductCollection
    {
        int _selectedTypes;
        public  List<Product> GetProduct(int selectedTypes)
        {
            _selectedTypes = selectedTypes;
            List<Product> products = new List<Product>();
            Product product;
            if (_selectedTypes==1)
            {
                product = new Product();
                product.Name = "Banana";
                product.Id =1;
                products.Add(product);
    
                product = new Product();
                product.Name = "Apple";
                product.Id =2;
                products.Add(product);
            } else 
            {   product = new Product();
                product.Name = "Onion";
                product.Id =10;
                products.Add(product);
            }
                return products;
    }} 

Код из MainActivity:

    public class MainActivity : Activity
        {      List<Product> products;
               List<ProductType> producttypes;

               public int selectedTypes{ get; set; }
               ProductCollection productCollection = new ProductCollection();
        
               protected override void OnCreate(Bundle bundle)
                {
                    base.OnCreate(bundle);
                    SetContentView (Resource.Layout.Main);

                    products = productCollection.GetProduct(selectedTypes);
                    adapter = new CustomAdapter(this, products);
                    adapter1 = new CustomAdapter(this, producttypes);     
                }
     private void SpTypes_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
        {
            selectedTypes = producttypes[e.Position].Id;
        }

     private void SpProducts_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
           {
               textview11.SetText(products[e.Position].Name, TextView.BufferType.Normal);} 

(Привязку XAML и обьявления адатеров пропустил так как не относится к этой ситуации)

Должно работать так, что требуемое свойство для метода GetProduct присваивается через конструктор из первого спиннера и фильтрует список выводимый во втором спиннере. На самом деле свойству selectedTypes ничего не присваисвается, оно остается нулевым и на вывод идет только блок «else».
Где ошибка и как правильно сделать этот импровизованный фильтр? Или есть другие варианты?

Спасибо

P.S. Пробовал объявить коллекцию и второй спиннер в событии ItemSelected второго спиннера (чтобы обновлялась коллекция), но тоже не работало

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Если бы это был Android код (предположу, что обычный Xamarin-Android использует обьекты Android), то в обработчик ItemSelected (для первого Spinner, т.е. выбор типа) я бы добавил такой код:

List<Product> productsOfSelectedType = GetProduct(selectedType);
adapter.clear();
adapter.addAll(productsOfSelectedType);

Замечание: если не ошибаюсь, при отрисовке первого Spinner, Android вызовет 1 раз этот ItemSelected автоматически, еще до того как это сделает пользователь.

В Android можно использовать ArrayAdapter
developer.android.com/...​/widget/ArrayAdapter.html
как в Xamarin — не знаю.

А в OnCreate, обычно, должны быть только те действия, которые выполняются один раз, при открытии страницы.

Спасибо, уже решил. Просто инициализацию адаптера, и метода вызова коллекции поставил в обработчик события первого спиннера и все зарабтало)

Подписаться на комментарии