2015-02-12 2 views
0

В настоящее время я экспериментирую с Xamarin Free и пытаюсь подключиться к моим веб-сервисам (ASP.NET), чтобы заполнить счетчик.Данные привязки от ASP.NET webservice к счетчику в Xamarin

То, что я пытаюсь сделать, это асинхронно вызвать службу, а затем, как только результат будет возвращен, заполните Spinner.

Что происходит, только один элемент привязан - первый элемент в массиве результатов.

Любой совет будет рад!

Код выглядит следующим образом:

using System; 
using Android.App; 
using Android.Content; 
using Android.Runtime; 
using Android.Views; 
using Android.Widget; 
using Android.OS; 
using WebServiceTestApplication.ServiceProxy; 

namespace WebServiceTestApplication 
{ 
    [Activity (Label = "WebServiceTestApplication", MainLauncher = true, Icon = "@drawable/icon")] 
    public class MainActivity : Activity 
    { 

     Tablet_Services proxy; 
     Spinner spCategories; 
     ArrayAdapter<string> spCategoriesContent; 

     protected override void OnCreate (Bundle bundle) 
     { 
      base.OnCreate (bundle); 
      SetContentView (Resource.Layout.Main); 
      proxy = new ServiceProxy.Tablet_Services(); 

      spCategoriesContent = new ArrayAdapter<string> (this, Android.Resource.Layout.SimpleSpinnerItem); 
      spCategoriesContent.SetDropDownViewResource (Android.Resource.Layout.SimpleSpinnerDropDownItem); 

      spCategories = (Spinner)FindViewById (Resource.Id.spCategories); 
      spCategories.Adapter = spCategoriesContent; 

      UpdateTreatmentCategories(); 
     } 

     void PopulateResults (srTreatmentCategory[] result) 
     { 
      if (result != null) 
      { 
       foreach (srTreatmentCategory c in result) 
       { 
        Console.WriteLine ("Adding {0} to spCategoriesContent", c.CategoryName); 
        spCategoriesContent.Add(c.CategoryName); 
       } 
      } 
     } 

     public void UpdateTreatmentCategories() 
     { 
      proxy.BegingetTreatmentCategories (delegate (IAsyncResult ar) { 
       var result = proxy.EndgetTreatmentCategories (ar); 
       PopulateResults (result); 
      }, null); 
     } 
    } 
} 

ответ

1

Вот что работает для меня в раскрывающемся списке под названием Категория. Я думаю, что вы на правильном пути, имея метод, который вы назвали PopulateResults(), который я назвал my LoadSpinnerData().

CategorySpinner = dialogView.FindViewById<Spinner>(Resource.Id.spinnerCategory); 
CategorySpinner.ItemSelected += spinner_ItemSelected; 

private void spinner_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e) 
     { 
      var spinner = (Spinner)sender; 
      SelectedCategory = string.Format("{0}", spinner.GetItemAtPosition(e.Position)); 
} 
private void LoadSpinnerData() 
     { 
      var tempCategories = (List<ServiceCategory>) CategoryManager.GetCategories(); 
      var categories = tempCategories.Select(category => category.Name).ToList(); 

      var categoryAdapter = new ArrayAdapter<string>(
       Activity, Android.Resource.Layout.SimpleSpinnerItem, categories); 

      categoryAdapter.SetDropDownViewResource 
       (Android.Resource.Layout.SimpleSpinnerDropDownItem); 
      CategorySpinner.Adapter = categoryAdapter; 
     } 

Вы можете найти весь код файла здесь https://github.com/valokafor/XamarinAndroidCustomDialog/blob/master/XamarinDroidCustomListView/ServiceDialog.cs

удачи с Xamarin

+0

Спасибо Val. Я действительно решил проблему, привязывая весь список к ArrayAdapter, а не привязывая элементы по одному - как и в вашем решении. –

0

Вы обновляете список моделей, но не обновляет адаптер. Попробуйте обновить адаптер с загруженными данными.

Редактировать Вот простейший пример.

void PopulateResults (srTreatmentCategory[] result) 
    { 
     if (result != null) 
     { 
      foreach (srTreatmentCategory c in result) 
      { 
       Console.WriteLine ("Adding {0} to spCategoriesContent", c.CategoryName); 
       spCategoriesContent.Add(c.CategoryName); 
      } 

      spCategoriesContent = new ArrayAdapter<string> (this, Android.Resource.Layout.SimpleSpinnerItem); 
      spCategoriesContent.SetDropDownViewResource (Android.Resource.Layout.SimpleSpinnerDropDownItem); 
      spCategories.Adapter = spCategoriesContent; 
     } 
    } 

В конце концов, вы должны рассмотреть возможность писать больше собственный Adapter реализации с updateData/swapData методом.

+0

Спасибо за быстрый ответ, но я не знаю, как вы имеете в виду. –

+0

В методе PopulateResults(), spCategoriesContent.Add (c.CategoryName); обновляет ArrayAdaptor ?? –

+0

Я пробовал ваше предложение aldorain, но никакой разницы. –

Смежные вопросы