I am trying to detect and handle the selection of a child in an ExpandableListView. But none of the event handlers or listeners I've tried ever seem to fire. Which one am I to use? I've tried:
lv.Click += HandleSelect
and
lv.ItemClick += HandleSelect
and
lv.ChildClick += HandleSelect
and
lv.ItemSelected += HandleSelect
and
lv.SetOnChildClickListener(new ChildClick)
HandleSelect Event Handler
void HandleSelect(Object o, EventArgs e)
{
var obj = o; //Breakpoint set here and it never breaks for any of the above;
}
ChildClick listener
class ChildClick : ExpandableListView.IOnChildClickListener
{
public void Dispose()
{
}
public IntPtr Handle
{
get { return new IntPtr(0); }
}
public bool OnChildClick(ExpandableListView parent, View clickedView, int groupPosition, int childPosition, long id)
{
var clicked = clickedView; //Breakpoint set here, never breaks;
return true;
}
}
Here is the BaseExpandableListAdapter I am using to populate the ExpandableListView
class MarketAdapter : BaseExpandableListAdapter
{
private readonly Context _context;
private readonly string[] _stores;
private readonly List<string> _storeList = new List<string>();
private readonly List<List<Call>> _calls = new List<List<Call>>();
public MarketAdapter(Context context, IEnumerable<Call> calls)
{
_context = context;
List<Call> marketCalls =
(from c in calls
where c.InProgress == "0"
select new Call() {CallNumber = c.CallNumber, ServiceType = c.ServiceType, Priority = c.Priority, Address = c.Address, City = c.City, Contact = c.Contact, Description = c.Description, Phone = c.Phone, Site = c.Site, State = c.State}).ToList();
foreach (IGrouping<string, Call> stores in marketCalls.GroupBy(s => s.Site))
{
_storeList.Add(stores.Key + "," + stores.First().City + "," + stores.First().State);
List<List<Call>> callgroup = new List<List<Call>>();
List<Call> call = new List<Call>(from c in stores select new Call() {CallNumber = c.CallNumber, ServiceType = c.ServiceType, Priority = c.Priority, Description = c.Description});
callgroup.Add(call);
_calls.Add(call);
}
_stores = _storeList.ToArray();
}
public override Object GetChild(int groupPosition, int childPosition)
{
return null;
}
public override long GetChildId(int groupPosition, int childPosition)
{
return childPosition;
}
public override int GetChildrenCount(int groupPosition)
{
return _calls.ElementAt(groupPosition).Count;
}
public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent)
{
List<Call> callList = _calls.ElementAt(groupPosition);
Call _call = callList.ElementAt(childPosition);
if (convertView == null)
{
LayoutInflater inflater = (LayoutInflater) _context.GetSystemService(Context.LayoutInflaterService);
convertView = inflater.Inflate(Resource.Layout.listviewchild, null);
}
TextView call = (TextView) convertView.FindViewById(Resource.Id.Call);
call.Text = _call.CallNumber;
TextView type = (TextView) convertView.FindViewById(Resource.Id.Type);
type.Text = _call.ServiceType;
TextView priority = (TextView) convertView.FindViewById(Resource.Id.Priority);
priority.Text = _call.Priority;
TextView description = (TextView) convertView.FindViewById(Resource.Id.Description);
description.Text = _call.Description;
return convertView;
}
public override Object GetGroup(int groupPosition)
{
return _stores[groupPosition];
}
public override long GetGroupId(int groupPosition)
{
return groupPosition;
}
public override View GetGroupView(int groupPosition, bool isExpanded, View convertView, ViewGroup parent)
{
string[] info = _stores[groupPosition].Split(new [] { "," }, StringSplitOptions.None);
string _site = info[0];
string _city = info[1];
string _state = info[2];
if (convertView == null)
{
LayoutInflater inflater = (LayoutInflater) _context.GetSystemService(Context.LayoutInflaterService);
convertView = inflater.Inflate(Resource.Layout.listviewparent, null);
}
TextView site = (TextView) convertView.FindViewById(Resource.Id.Site);
site.Text = _site;
TextView city = (TextView) convertView.FindViewById(Resource.Id.City);
city.Text = _city;
TextView state = (TextView) convertView.FindViewById(Resource.Id.State);
state.Text = _state;
return convertView;
}
public override bool IsChildSelectable(int groupPosition, int childPosition)
{
return true;
}
public override int GroupCount
{
get { return _stores.Length; }
}
public override bool HasStableIds
{
get { return true; }
}
}
EDIT: Also just tried the solution explained here OnChildClick inside ExpandableListActivity does not fire by setting the Layout and all of my TextViews focusable attrubute to false in listviewchild.axml but it still doesn't fire the listener.