android


ExpandableListView Child Events


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.
I changed
void HandleSelect(Object o, EventArgs e)
{
//do something
}
to
void HandleSelect(object o, ExpandableListView.ChildClickEventArgs e)
{
//do something
}
and it is working.
Use an onChildClickListener, but you need to call it from the ExpandableListView class, like this:
lv.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
#Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id)
});
}
I experienced the same problem.
In my listviewchild I had the xml attribute:
android:clickable="true"
Which silently consumed the event. Removing the attribute enabled the ChildClick Eventhandler.

Related Links

Fill FirebaseRecyclerAdapter with data from more than one node
Continue playing videoview after interruption
How to Parse a Nested JSON response in Android
Searching Bluetooth Nearby in 6.0.1
Android textview and edit text data passing
How to make content provider visible to all users on tablet
java.lang.NoClassDefFoundError: com.google.firebase.FirebaseOptions on Android API 15
How to load images from res/drawable-folder in ReactNative-App?
Error inflating class EditText
Realm recycler view/Recycler view adapter causing latency
ClassNotFoundException with FirebaseStorage
On android what alternative can I use to send key inputs to the entire OS
Use Font-face in Android WebView
ActionBar , TabLayout are leaving (unnecessary ) space after become hidden , Gone
Graphhopper Set up android
How can I change the default SQLite timezone

Categories

HOME
sonarqube
notepad++
checkstyle
jmeter
jwplayer
socket.io
carousel
simulink
commonjs
x-cart
cmdb
rtf
spring-social
parameter-passing
alpacajs
scsi
easyphp
digital-signature
apache2.4
poedit
blade
easeljs
qliksense
data.stackexchange.com
delimiter
amazon-quicksight
oculus
postback
kodi
fstream
autolisp
wacom
hard-drive
indy10
yowsup
numpy-broadcasting
node-mssql
cin
laravel-elixir
apriori
subclipse
oracle-service-bus
importerror
show-hide
apache-spark-dataset
rfc3339
servermanager
flask-restful
identification
manova
video-conferencing
static-cast
compiler-design
edit
libjpeg
cd-burning
vcloud-director-rest-api
pure-css
redbeard-ios
pacemaker
scaffolding
query-by-example
spreadjs
fink
cycle2
jaunt-api
gocql
vigenere
oracle-spatial
rdflib
pyobjc
typeconverter
bcache
document-repository
uncaught-typeerror
psr-4
create.js
ss7
wxformbuilder
spring-3
cocoalibspotify-2.0
gpars
wp7test
kqueue
wiimote
stress
promotion-code
tournament
pylucene
rmdir
cgbitmapcontextcreate
codebase
burndowncharts
visualj#
int64
flvplayback
netbeans6.1

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App