我正在尝试检测和处理 ExpandableListView 中对子项的选择。但是我尝试过的事件处理程序或侦听器似乎都没有触发。我该用哪一个?我试过了:
lv.Click += HandleSelect
和
lv.ItemClick += HandleSelect
和
lv.ChildClick += HandleSelect
和
lv.ItemSelected += HandleSelect
和
lv.SetOnChildClickListener(new ChildClick)
HandleSelect 事件处理程序
void HandleSelect(Object o, EventArgs e)
{
var obj = o; //Breakpoint set here and it never breaks for any of the above;
}
ChildClick 监听器
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;
}
}
这是我用来填充 ExpandableListView 的 BaseExpandableListAdapter
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; }
}
}
编辑:也刚刚尝试了这里解释的解决方案OnChildClick inside ExpandableListActivity 不会通过在 listviewchild.axml 中将布局和我的所有 TextViews 可聚焦属性设置为 false 来触发,但它仍然不会触发侦听器。