I need to find out the pixel position of one element in a list that's been displayed using a ListView
. It seems like I should get one of the TextView's and then use getTop()
, but I can't figure out how to get a child view of a ListView
.
Update: The children of the ViewGroup
do not correspond 1-to-1 with the items in the list, for a ListView
. Instead, the ViewGroup
's children correspond to only those views that are visible right now. So getChildAt()
operates on an index that's internal to the ViewGroup
and doesn't necessarily have anything to do with the position in the list that the ListView
uses.
See: Android ListView: get data index of visible item and combine with part of Feet's answer above, can give you something like:
int wantedPosition = 10; // Whatever position you're looking for int firstPosition = listView.getFirstVisiblePosition() - listView.getHeaderViewsCount(); // This is the same as child #0 int wantedChild = wantedPosition - firstPosition; // Say, first visible position is 8, you want position 10, wantedChild will now be 2 // So that means your view is child #2 in the ViewGroup: if (wantedChild < 0 || wantedChild >= listView.getChildCount()) { Log.w(TAG, "Unable to get view for desired position, because it's not being displayed on screen."); return; } // Could also check if wantedPosition is between listView.getFirstVisiblePosition() and listView.getLastVisiblePosition() instead. View wantedView = listView.getChildAt(wantedChild);
The benefit is that you aren't iterating over the ListView's children, which could take a performance hit.
This code is easier to use:
View rowView = listView.getChildAt(viewIndex);//The item number in the List View if(rowView != null) { // Your code here }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With