在我的适配器中的嵌套类中调用NotifyDataSetChanged

时间:2017-05-24 13:14:53

标签: c# android listview xamarin

我有一个列表视图,里面有一个按钮。如果我单击此按钮,则需要删除它所在的行。它“有点”有效,唯一能给我带来问题的是它不会刷新好。只有当我出去回到列表中它才会消失。或者如果我翻转我的屏幕。 这是我目前的代码。

using System;
using System.Collections.Generic;
using Android.App;
using Android.Graphics;
using Android.Views;
using Android.Widget;
using CardAppReal.Lib.Models;
using NavigationDrawerTest;
using Square.Picasso;
using SQLite;
using Path = System.IO.Path;

namespace CardAppReal.Assets
{
    public class ListAdapter : BaseAdapter<Card>
    {
        List<Card> items;
        Activity context;
        public ListAdapter(Activity context, List<Card> items)
            : base()
        {
            this.context = context;
            this.items = items;
        }
        public override long GetItemId(int position)
        {
            return position;
        }
        public override Card this[int position]
        {
            get { return items[position]; }
        }
        public override int Count
        {
            get { return items.Count; }
        }
        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            var item = items[position];
            View view = convertView;
            if (view == null) // no view to re-use, create new
                view = context.LayoutInflater.Inflate(NavigationDrawerTest.Resource.Layout.CardSavedRowLayout, null);
            view.FindViewById<TextView>(NavigationDrawerTest.Resource.Id.TextCardSavedList1).Text = item.name;
            view.FindViewById<TextView>(NavigationDrawerTest.Resource.Id.TextCardSavedList2).Text = item.supertype;
            view.FindViewById<TextView>(NavigationDrawerTest.Resource.Id.TextCardSavedList3).Text = item.set;
            Picasso.With(context).Load(item.imageUrl).Into(view.FindViewById<ImageView>(NavigationDrawerTest.Resource.Id.CardSavedImage));
            var imgButton = view.FindViewById<ImageButton>(NavigationDrawerTest.Resource.Id.ImgButtonSaved);
            Picasso.With(context).Load(Resource.Drawable.delete).Into(imgButton);
            view.SetBackgroundColor(Color.Argb(150, 153, 217, 234));
            imgButton.Tag = item.id;
            imgButton.SetOnClickListener(new ButtonClickListener(this.context, this));
            return view;
        }
        private class ButtonClickListener : Java.Lang.Object, View.IOnClickListener
        {
            private Activity activity;
            private ListAdapter adapter;

            public ButtonClickListener(Activity activity, ListAdapter adapter)
            {
                this.activity = activity;
                this.adapter = adapter;
            }

            public void OnClick(View v)
            {
                string name = (string)v.Tag;
                string text = $"{name} Button Click.";
                Toast.MakeText(this.activity, text, ToastLength.Short).Show();
                string folder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),
                    "database.db3");
                var db = new SQLiteConnection(folder);
                db.Delete<Card>(v.Tag.ToString());
                adapter.NotifyDataSetChanged();
            }
        }
    }

}

我尝试将适配器提供给监听器,但这确实不起作用。

0 个答案:

没有答案