2012-02-10 71 views
2

剛開始使用Monodroid,我目前正在開發一個ListView。 我有一個列表添加到ArrayAdapter,我可以看到我的前兩個項目正確。但是,當我添加第三個元素到列表中時,listview不會更新。即使我調用notifyDataSetChanged()。Monodroid ListView更新問題

private ArrayAdapter<string> la; 
private ListView list; 
private List<String> dayData = new List<String>(); 

protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 
      this.SetContentView(Resource.Layout.TestLayout); 


      dayData.Add(" Test"); 
      dayData.Add(" Test2"); // Theese two elements shows up fine 

      list = this.FindViewById<ListView>(Resource.Id.menuList); 
      la = new ArrayAdapter<string>(this, Resource.Layout.list_item, dayData); 
      list.Adapter = la; 
      list.TextFilterEnabled = true; 

      dayData.Add(" Test3"); // This one is not shown 
      la.NotifyDataSetChanged(); 


     } // OnCreate 

我錯過了什麼線索?

回答

0

我不能完全肯定,但我認爲,項目複製到ArrayAdapter,所以你需要做的是:

la.Add(" Test3"); 

,如果你想保持列表中的相同,你將不得不將其添加到list

0

試試這個添加la.notifyDataSetInvalidated();在la.NotifyDataSetChanged()之後;

0

我不知道這會幫助任何人多少,但它似乎在我的例子中工作正常。

我有一個ViewModel類,用於保存在應用程序內更新的所有數據,並在集合更改時觸發「集合更新」操作。

// All within ViewModel.cs 

private Action SearchResultsUpdated; 

private List<SearchResult> m_oSearchResults; 

Public List<SearchResult> SearchResults 
{ 
    get 
    { 
     if (m_oSearchResults == null) 
      m_oSearchResults = new List<SearchResult>(); 
     return m_oSearchResults; 
    } 
    set 
    { 
     if (value != m_oSearchResults) 
     { 
      m_oSearchResults = value; 
      // 
      // Fire update event 
      if (SearchResultsUpdated != null) 
       SearchResultsUpdated(); 
     } 
    } 
} 

然後,我在適配器類中爲此事件添加一個處理程序。

// All within SearchResultsAdapter.cs 

public class SearchResultsAdapter : BaseAdapter<SearchResult> 
{ 
. 
. 
    // Constructor 
    public SearchResultsAdapter (Activity oContext) 
     : base() 
    { 
     // Add handler for list refresh 
     ViewModel.SearchResultsUpdated += NotifyDataSetChanged; 
     // 
     m_oContext = oContext; 
    } 
} 

在適配器中,我使用集合ViewModel.SearchResults作爲列表視圖的數據上下文。希望幫助和足夠讓每個人都明白。

0

要更新的ListView

private ListView lvAnuncios = null; 

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

     this.lvAnuncios = this.FindViewById<ListView>(Resource.Id.MisAnuncios_lvAnuncios); 
    } 

    private void ReloadListView() 
    { 
     if (this.lvAnuncios.Adapter != null) 
     { 
      this.lvAnuncios.Adapter.Dispose(); 
      this.lvAnuncios.Adapter = null; 
     } 

             //Class that inherits de ArrayAdapter 
     this.lvAnuncios.Adapter = new adAnuncio(this, Resource.Layout.FilaListViewAnuncio, csVariable.objUsr.lstAnuncios); 
    }