Mik Big
Mik Big

Reputation: 23

Android Xamarin - ListView Adapter with ObservableCollection

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

Answers (1)

therealjohn
therealjohn

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

Related Questions