How to remove all listeners added with addTextChangedListener

前端 未结 11 1562
谎友^
谎友^ 2020-11-27 16:24

I have a ListView where each row has an EditText control. I want to add a TextChangedListener to each row; one that contains extra dat

11条回答
  •  挽巷
    挽巷 (楼主)
    2020-11-27 17:01

    I had the same problem with xamarin/C# and I wrote for this a class to manage click events inside a ListView where the item view will be "recycled":

     public class ViewOnClickEventHandler: Java.Lang.Object
     {
        private List EventList { get; set; }
    
        public void SetOnClickEventHandler(View view, EventHandler eventHandler)
        {
            if (view.Tag != null)
            {
                ViewOnClickEventHandler holder = ((ViewOnClickEventHandler)view.Tag);
    
                foreach (EventHandler evH in holder.EventList)
                    view.Click -= evH;
    
                for (int i = 0; i < holder.EventList.Count; i++)
                    holder.EventList[i] = null;
    
                holder.EventList.Clear();
            }
    
            EventList = new List();
            EventList.Add(eventHandler);
            view.Click += eventHandler;
            view.Tag = this;
        }
    }
    

    You can use it in your ListView BaseAdapter GetItem method this way:

           TextView myTextView = convertView.FindViewById(Resource.Id.myTextView);
    
            ViewOnClickEventHandler onClick = new ViewOnClickEventHandler();
            onClick.SetOnClickEventHandler(myTextView, new EventHandler(delegate (object sender, EventArgs e)
            {
                // Do whatever you want with the click event
            }));
    

    The ViewOnClickEventHandler class will care about multiple events on your textview. You can also change the class for textchange events. It's the same princip. I hope this will help.

    bye, nxexo007

提交回复
热议问题