1

ユーザーが「情報を追加」ボタン(画面上部)をクリックしてリストビューにアイテム(コードと説明を含むクラス)を動的に追加できる必要があるアクティビティを作成しています。最初、リストビューは空です。カスタム ビュー (RowItem.axml) を作成しました。このビューは、Adapter GetView() 呼び出しで拡張され、特定の行の関連情報を表示します。問題は、リストに新しい項目を追加する必要がある [add info].Click イベントにあります。コードは次のようになります。

    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(..) ... )

一日中、いくつかの例をウェブで検索していましたが、Monodroid ではなく Android Java でしか見つかりませんでした。これらの例では、Adapter の .Add メソッドを使用します (ほとんどの場合、文字列や整数などの単純な型のアダプターも使用します)。

この例外を取得するために何が間違っているのかわかりません。(私が気付いた唯一のことは、Android.Widget.ArrayAdapter (私の祖先クラス) のメソッド Add が次のように定義されていることです:

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

「@」の使用はどういう意味ですか? 私の例外はこの「@」に関連していますか? 私が試してみました

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

正しい方向への助けをお願いします。どうもありがとうございました。

4

1 に答える 1

2

ArrayAdapter を使用する代わりに、BaseAdapter を使用します。のような優れたデータ構造をList<T>内部データ ストアとして自由に使用できます。

あなたがしたいことはAdd(T item)、リストを呼び出してからAdd(T item)アダプターのNotifyDataSetChanged()メソッドを呼び出すアダプターにメソッドを実装することです。これにより、アダプタのリスト ビューが更新されます。

この例をチェックしてください。しばらく前のものですが、コードはカスタム ビューでリストを設定するために機能します。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[]
}
于 2013-03-23T18:22:30.760 に答える