xamarin - 在xamarin中,错误:只有创建视图层次结构的原始线程才能触摸它的视图

  显示原文与译文双语对照的内容

我收到一个错误 error: Only the original thread that created a view hierarchy can touch its views

排队


BookingAdapter expListAdapter = new BookingAdapter (this, listDataHeader, listDataChild);
try{
explistView.SetAdapter (expListAdapter);
explistView.SetGroupIndicator (null);
}
catch(Exception e) {
Toast.MakeText (this,e+"",ToastLength.Long).Show();
}

这是我的代码


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using System.ServiceModel.Web;
using SalonServices;
using System.ServiceModel;

namespace PariSalon
{
[Activity (Label ="BookingRequest")] 
public class BookingRequest : Activity
{
 public List<GetServices> listDataHeader;
 public List<GetServices> services;
 Dictionary<GetServices, List<String>> listDataChild;
 ExpandableListView explistView;
 public static readonly EndpointAddress EndPoint = new EndpointAddress("http://xxx.xxx.Xx.xx/SalonService/SalonServices.svc");
//public static readonly EndpointAddress EndPoint = new EndpointAddress("http://xxxx");
 private SalonServicesClient serviceClient;

 protected override void OnCreate (Bundle bundle)
 {
 base.OnCreate (bundle);

 SetContentView(Resource.Layout.Booking_request);
 InitializeSalonServiceClient();
 Button submit = FindViewById<Button> (Resource.Id.button2);


//string userid ="1";
//serviceClient.GetServicesForUserAsync (userid);
 string userid ="1";
 serviceClient.GetServicesForUserAsync (userid);
//serviceClient.GetServicesForUserAsync (userid);

 submit.Click += delegate {
 Intent intent = new Intent(this, typeof(Booking_Request_sent));
 StartActivity(intent);
 };


//Create your application here
/* 

 explistView.SetOnGroupClickListener( new OnGroupClickListener());

//Catch click event attempt 2
 explistView.GroupClick += (object pobjSender, ExpandableListView.GroupClickEventArgs pArgs) =>
 {
 int len = expListAdapter.GroupCount;
 for(int i=0;i<len;i++)
 {

 if(i!=groupPosition)
 {
 explistView.CollapseGroup(i);
 }
 if(i==groupPosition){
 if(explistView.IsGroupExpanded(groupPosition)){
 explistView.CollapseGroup(groupPosition);
 }
 else {
 explistView.ExpandGroup(groupPosition);
 }


 }
 }
 };*/
 }
 private void InitializeSalonServiceClient()
 {
 BasicHttpBinding binding = CreateBasicHttp();
 serviceClient = new SalonServicesClient(binding, EndPoint);
//serviceClient.GetServicesForUserCompleted += GetServicesForUserCompleted;
//serviceClient.GetProductDetailsCompleted += GetProductDetailsCompleted;
 serviceClient.GetServicesForUserCompleted += GetServicesForUserCompleted;

 }


 private void GetServicesForUserCompleted(object sender, GetServicesForUserCompletedEventArgs getServiceDataCompletedEventArgs)
 {
 string msg = null;

 if (getServiceDataCompletedEventArgs.Error!= null)
 {
 msg = getServiceDataCompletedEventArgs.Error.Message;
 }
 else if (getServiceDataCompletedEventArgs.Cancelled)
 {
 msg ="Request was cancelled.";
 }
 else
 {
 services = new List<GetServices>(getServiceDataCompletedEventArgs.Result);
 prepareListData ();
 explistView = FindViewById<ExpandableListView> (Resource.Id.expandableselectservicetype);
 BookingAdapter expListAdapter = new BookingAdapter (this, listDataHeader, listDataChild);
 try{
 explistView.SetAdapter (expListAdapter);
 explistView.SetGroupIndicator (null);
 }
 catch(Exception e) {
 Toast.MakeText (this,e+"",ToastLength.Long).Show();
 }


 }

 }

 private static BasicHttpBinding CreateBasicHttp()
 {
 BasicHttpBinding binding = new BasicHttpBinding
 {
 Name ="basicHttpBinding",
 MaxBufferSize = 2147483647,
 MaxReceivedMessageSize = 2147483647
 };
 TimeSpan timeout = new TimeSpan(0, 0, 50);
 binding.SendTimeout = timeout;
 binding.OpenTimeout = timeout;
 binding.ReceiveTimeout = timeout;
 return binding;
 }


 private void prepareListData() {
 listDataHeader = new List<GetServices>();
 listDataChild = new Dictionary<GetServices, List<String>>();
 listDataHeader.Clear ();
 if (services!= null) {
 foreach (GetServices pd in services) {
 listDataHeader.Add (pd);
 }
//Adding child data
//listDataHeader.Add("Top 250/n");
//listDataHeader.Add("Now Showing");
//listDataHeader.Add("Coming Soon.."); 

 List<String> childLabel = new List<String> ();
 childLabel.Add ("Date :");
 childLabel.Add ("Time :");
 childLabel.Add ("User :");
 childLabel.Add ("Second User:");
 childLabel.Add ("Status :");
 childLabel.Add ("Cancel");

 listDataChild.Add (listDataHeader.ElementAt (0), childLabel);//Header, Child data
 listDataChild.Add (listDataHeader.ElementAt (1), childLabel);
 listDataChild.Add (listDataHeader.ElementAt (2), childLabel);
 }
 }


}
}

我有另一个适配器类,但是我认为这个错误只是在这个 class.How 中,我可以解决这个问题。 谁能帮我解决这个问题。

时间: 作者:

你正在从工作线程的SalonServicesClient 调用 GetServicesForUserCompleted 方法。 在 UI线程调用它。

作者:
...