我有一个带有自定义适配器的 ExpandableListView
,在我的手势检测器中,我试图找出如何找到通过手势选择的列表项。
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public void onLongPress(MotionEvent e) {
int itemnum = listView.pointToPosition((int) e.getX(), (int) e.getY());
itemnum -= listView.getFirstVisiblePosition();
所以,如果 itemnum=7 可能是
group A label
group B label
item B1
item B2
group C label
item C1
item C2
item C3 <== this is position 7, assuming group A label was still on the screen
因此,如果 B 组折叠,则第 7 项将是 C5 或 D1。
给定一个特定的位置编号,我如何确定它指的是哪个组位置和子位置?
如果我知道扩展了哪个组,那么我可以循环遍历,计算每个项目,但如果列表已经滚动,则不应计算较早的项目。
那么,给定 ExpandableListView
上的 MotionEvent
,我如何将其转换为执行操作的 View
?
最佳答案
我找到了解决方案。不确定这是否是最佳方法。
@Override
public void onLongPress(MotionEvent e) {
int itemnum = listView.pointToPosition((int) e.getX(), (int) e.getY());
int itemnum2 = itemnum - listView.getFirstVisiblePosition();
View vi = listView.getChildAt(itemnum2);
这就是我获得 View 的方式。
不幸的是,在我从 vi< 检索到
上面:TextView
之后,为了找到子记录,在我的例子中是一个 File
我不得不循环
String filename = textView.getText().toString();
int groupCount = mAdapter.getGroupCount();
for(int t = 0; t < groupCount; t++) {
int childCount = mAdapter.getChildrenCount(t);
for(int y = 0; y < childCount; y++) {
File f = (File) mAdapter.getChild(t, y);
if (f.getName().equals(filename)) {
}
}
}
关于android - 将MotionEvent转换为位置后,如何确定在可扩展 ListView 中引用了哪个列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13897889/