2016-12-26 8 views
3

私はAdapterでListItemを設定したListViewを持っているXamarin経由で基本的なAndroidアプリケーションを開発しています。しかし、私が項目を削除したり編集したりすると、リストビュー自体がリフレッシュされません。私はObservableCollectionを知っているが、私はアダプタでそれを使う方法を知らない。誰か助けてくれますか?私はXamarinで新しいです。Android Xamarin - ObservableCollectionを使用したListViewアダプタ

アダプタ:

public class MealsAdapter : BaseAdapter<Meal> 
{ 
    List<Meal> items; 
    Activity context; 

    public MealsAdapter(Activity context, List<Meal> items) 
     : base() 
    { 
     this.context = context; 
     this.items = items; 
    } 

    public override Meal this[int position] 
    { 
     get 
     { 
      return items[position]; 
     } 
    } 

    public override int Count 
    { 
     get 
     { 
      return items.Count; 
     } 
    } 

    public override long GetItemId(int position) 
    { 
     return position; 
    } 

    public override View GetView(int position, View convertView, ViewGroup parent) 
    { 
     var item = items[position]; 

     View view = convertView; 
     if (view == null) 
      view = context.LayoutInflater.Inflate(Resource.Layout.MealListItem, null); 
     view.FindViewById<TextView>(Resource.Id.textViewNazev).Text = item.Name; 
     view.FindViewById<TextView>(Resource.Id.textViewBilkoviny).Text = context.Resources.GetString(Resource.String.BilkovinyNadpis) + ": " + item.Bilkoviny.ToString(); 
     view.FindViewById<TextView>(Resource.Id.textViewSacharidy).Text = context.Resources.GetString(Resource.String.SacharidyNadpis) + ": " + item.Sacharidy.ToString(); 

     return view; 
    } 
} 

リストビュー:

ListView listView;  
protected override void OnCreate(Bundle savedInstanceState) 
      { 
       base.OnCreate(savedInstanceState); 
       SetContentView(Resource.Layout.MealsSettings); 

       listView = FindViewById<ListView>(Resource.Id.listViewJidlo); 

       listView.Adapter = new MealsAdapter(this, DataStorage.meallist); 
       listView.ItemClick += ListView_ItemClick; 
      } 

DataStorage.meallistは単純なリストです。 ObservableCollectionをアダプタとDataStorage.meallistに配置しようとしましたが、それは助けとなりました。

答えて

1

ListViewにコレクションが変更されたことを知らせるには、NotifyDataSetChanged()に電話する必要があります。

List<Meal> itemsのアイテムを削除/削除する場合は、後で必ずNotifyDataSetChanged()に電話してください。

関連する問題