2013-03-23 116 views
1

我正在編寫一個活動,其中用戶必須能夠通過單擊「添加信息」按鈕(向上)動態添加項目(帶有代碼和說明的類)到列表視圖屏幕頂部)。最初,該列表視圖是空的。我做了一個自定義視圖(RowItem.axml),它將在Adapter GetView()調用中被誇大,以顯示特定行的相關信息。問題是在[添加信息]。點擊事件,我必須在列表中添加新項目: 的代碼是這樣的:如何在Monodroid中動態添加項目到列表視圖

void button_Click(object sender, EventArgs e) 
    { 
     AddNewItemToListView(listview.count); 
    } 
    void AddNewItemToListView(int count) 
    { 
     DataItem item = new DataItem(); 
     item.Code = FindCode(count); 
     item.Description = FindDescription(count); 

     listview_adapter.Add(item); // !! HERE AN EXCEPTION IS THROWN: --> Java.Lang.UnsupportedOperationException: 
     listAdapter.NotifyDataSetChanged(); 
    } 

這裏是DataItem的定義:

public class DataItem 
{ 
    public string Code {get;set;} 
    public string Description {get;set;} 
} 

這裏是我的自定義接口的定義:

public class MyListAdapter: ArrayAdapter<DataItem> 
{ 
    // override code here (ex: GetView(..) ...) 

整個一天,我一直在尋找一些例子網頁,但我只在Android中爪哇發現不MonoDroid的。在這些示例中,它們使用適配器的.Add方法(並且在大多數情況下使用簡單類型的適配器,如字符串或整數)。

我搞不​​清楚我做錯了什麼來得到這個異常。 (我發現的唯一的事情就是爲接下來的方法中添加Android.Widget.ArrayAdapter(我的祖先類)的定義:

Android.Widget.ArrayAdapter<T>.Add(T @object); 

什麼是「@」,指的是使用的是我的異常有關這個「@」?我已經試過

listview_adapter.Add(@item); // STILL SAME EXCEPTION 

請朝着正確方向的任何幫助將非常感謝。非常感謝你。

回答

2

而不是使用ArrayAdapter的,使用BaseAdapter。它給你自由使用一個漂亮的數據結構,如List<T>作爲實習生數據存儲。

你想要做的是在適配器上實現Add(T item)方法,該方法調用列表的Add(T item),然後調用適配器的NotifyDataSetChanged()方法。這指示適配器的列表視圖自行刷新。

結賬this example。這是一段時間後,但代碼用於設置自定義視圖的列表。你只需要執行Add(T item)這樣的事情:

public class MyAdapter : BaseAdapter<DataItem> 
{ 
    private readonly List<DataItem> _items = new List<DataItem>(); 

    // Constructor if you need to set up other stuff. 

    public void Add(DataItem item) 
    { 
     _items.Add(item); 
     NotifyDataSetChanged(); 
    } 

    // Overrides for GetItemId, GetView, Count, this[] 
} 
+1

非常感謝答案先生。我會嘗試一下,讓你知道它是怎麼回事 – TheSoul 2013-03-24 09:47:08

+1

那麼結果如何呢? – Cheesebaron 2013-04-01 22:35:22

+1

嗨Cheesebaron。很抱歉回答這麼晚...很多項目要跟上。但是謝謝你的解決方案。它確實工作!非常感謝。 – TheSoul 2013-04-12 21:40:55

相關問題