2014-09-26 2 views
0

나는 ListView을 Android Xamarin에서 ListAdapter을 사용하여 만듭니다. 나는 Oncreate()에 표시된 것을 넣을 때이 내 코드ListAdapter Android 용 Xamarin에서

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

입니다 ListActivity에게

을 확장 활동에 사용하고 있습니다. 그러나 일부 데이터 (다운로드 완료 이벤트)가있을 때 데이터를 바인드하려면 ListAdapter이 필요하므로 다운로드 데이터를 완료 한 후 호출하는 메소드에 넣으십시오.하지만 왜 ListAdapter을 표시 할 수 없습니까? 내 ListView이 비어 있습니다. 위와 같은 코드를 사용하고 있습니다.

이 이것이다 다운로드 이벤트

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"); 
      } 
     } 

을 완료 내에서 OnCreate 방법

base.OnCreate(bundle); 

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


      SetContentView(Resource.Layout.ListTopStoriesLayout); 

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

이이 방법

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"); 

     } 

그리고 "설정 어댑터"안드로이드 로그 캣에서 CreateList()이 표시되지 않습니다이다 . ListAdapter에서 중지 된 것으로 보입니다.

+0

xamarin에서 true로 읽으면 어댑터를 설정할 필요가 없습니다. 왜냐하면 나는 단지 OnCreate()에서 그것을 사용하고 있기 때문에 작동한다. – albilaga

+0

당신은 맞다. :) 그러면 Application.Context가 잘못되었다. Activity context를 사용해야한다 ... – Selvin

+0

나는 이미 Application.Context를 변경했지만 아직 작동하지 않는다. – albilaga

답변

1

확인. 내 해결책을 찾았 어. ListAdapter를 업데이트하려면 UI Thread에서 실행해야합니다. 이것이 새로운 다운로드 완료 이벤트입니다.

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"); 
      } 
     } 
관련 문제