2014-09-26 45 views
0

我使用Android Xamarin上的ListAdapter创建ListView。我使用它上扩展ListActivityListAdapter On Xamarin for Android

活动这是我的代码

ListAdapter = new ArrayAdapter<string> (
    this, 
    Android.Resource.Layout.SimpleListItem1, 
    new string[] { "tes1", "tes2", "tes3" } 
); 

当我把在Oncreate()它所示。但我确实需要ListAdapter绑定一些事件(说下载完成事件),所以我把它放在一个我下载数据完成后调用的方法,但为什么ListAdapter无法显示?我的ListView变空了。我使用与上面相同的代码。

这是我的onCreate方法

base.OnCreate(bundle); 

      _DataTopStories = new TopStoriesViewModel(); 
      _DataService = new DataService(); 


      SetContentView(Resource.Layout.ListTopStoriesLayout); 

      _DataService.GetTopStories(); 
      _DataService.DownloadCompleted += _DataService_DownloadCompleted; 

这是下载事件完成

void _DataService_DownloadCompleted(object sender, EventArgs e) 
     { 
      var raw = ((DownloadEventArgs)e).ResultDownload; 
      if(raw!=null) 
      { 
       _DataTopStories = JsonConvert.DeserializeObject<TopStoriesViewModel>(raw); 
       CreateList(); 
       Log.Info("ds", "download completed"); 
      } 
     } 

这是CreateList()方法

private void CreateList() 
     { 
      Log.Info("ds", "list"); 
      ListAdapter = new ArrayAdapter<string>(Application.Context, Android.Resource.Layout.SimpleListItem1, new string[] { "tes4", "tes52", "tes6" }); 
      Log.Info("ds", "set adapter"); 

     } 

而在Android的logcat的 “设置适配器” 不会示。它看起来停在ListAdapter上。

+0

如果我读它在xamarin真的没有必要设置适配器。因为我只是使用OnCreate(),它的工作原理 – albilaga 2014-09-26 08:33:53

+0

你是对的:)然后Application.Context是错误的..你需要使用Activity的上下文... – Selvin 2014-09-26 08:36:48

+0

我已经改变Application.Context这个,但仍然不工作 – albilaga 2014-09-26 08:41:04

回答

1

好的。找到我的解决方案要更新ListAdapter我需要在UI线程中运行它,所以这是我的新下载完成的事件

void _DataService_DownloadCompleted(object sender, EventArgs e) 
     { 
      var raw = ((DownloadEventArgs)e).ResultDownload; 
      if(raw!=null) 
      { 
       _DataTopStories = JsonConvert.DeserializeObject<TopStoriesViewModel>(raw); 
       RunOnUiThread(() => CreateList()); 
       //CreateList(); 
       Log.Info("ds", "download completed"); 
      } 
     }