Reputation: 23
im developing basic android app via Xamarin, where i have ListView with ListItem set in Adapter. But when i delete or edit any item, listview doesnt refresh itself. I know ObservableCollection, but I dont know how to use it with adapter. Can someone help me, please? Im new in Xamarin.
Adapter:
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 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 is simple List. I have tried put ObservableCollection to adapter and to DataStorage.meallist, but it doeasnt help.
Upvotes: 3
Views: 1176
Reputation: 2398
You will need to call NotifyDataSetChanged()
to let the ListView
know that it's collection changed.
Wherever you are deleting/removing items in the List<Meal> items
make sure to call NotifyDataSetChanged()
afterwards.
Upvotes: 3